Bash

使用自定義二進制/文件名稱建構 bash(或備用 linux 包)

  • October 7, 2013

我正在嘗試將 Bash 4.2 建構為用於 Enterprise Linux 5 系統的 RPM 包,預設情況下與 3.2.25 一起提供。這可以成功,但是,我希望兩個版本在系統上共存,以避免與系統包衝突,並允許系統/其他腳本繼續使用它們兼容的 bash3。

我的計劃如下:

  • 重命名包’bash4’並且不要與’bash’衝突或提供’sh'
  • 配置 bash 以使用二進制名稱“bash4”進行建構,並相應地更改任何文件或支持文件的路徑

理論上這很簡單,而且 Vim 在其配置腳本中提供二進制前綴/後綴,但是 bash 似乎沒有這個功能。我發現的最接近的是 automake 的 EXEEXT,它提供了對可執行擴展(例如 Windows 上的 .exe)的支持,但這並不是為我想要做的事情而設計的,它不能解決文件問題。

雖然bashautoconf 版本 (2.63) 有點舊(2008 年 9 月),但它支持--program-transform-name--program-suffix特性。遺憾的是,bash 建構過程沒有使用文件中詳述的這些特性,也沒有使用參數來允許在建構時處理手冊頁。

由於文件和更改的數量很少,我推荐一種半手動的方法,即編寫一個小腳本來進行更改預安裝。您可以選擇使用installwatch來確保在安裝過程中擷取所有內容,但bash實際上非常少。(FWIW,我快速瀏覽了 FreeBSD bash 埠和 Debian bash 更新檔,沒有任何合適的修復跡象。)

雖然通常是破壞建構的一種有趣方式,但您可以在這裡濫用EXEEXT

ac_cv_exeext=42 ./configure [...]
make
./bash42 -c 'echo $BASH_VERSION'
4.2.42(1)-release

因為它為您節省的只是重命名,我真的不推薦它;-)

還有一點可以從中獲得:

./configure [...]
make -e Program=bash42

因為這也反映了您在生成的bashbug腳本中的更改(儘管它沒有重命名它)。

引用自:https://unix.stackexchange.com/questions/93893