我正在嘗試將 Bash 4.2 建置為 RPM 軟體包,以便在 Enterprise Linux 5 系統上使用,預設使用 3.2.25。這工作成功,但是,我希望兩個版本在系統上共存,以避免與系統套件衝突,並允許系統/其他腳本繼續使用它們相容的bash3。
我的計劃如下:
- 重新命名包“bash4”,不要與“bash”衝突或提供“sh”
- 配置 bash 以使用二進位名稱“bash4”進行構建,並相應地更改任何文件或支援文件的路徑
理論上這很簡單,Vim 在其配置腳本中提供了二進制前綴/後綴,但是 bash 似乎沒有此功能。我發現的最接近的是automake 的EXEEXT,它提供了對可執行擴展名的支援(例如Windows 上的.exe),但這並不是真正為我想做的事情而設計的,也沒有解決文件問題。
答案1
儘管bash
autoconf 版本 (2.63) 有點舊(2008 年 9 月),但它支援--program-transform-name
和--program-suffix
功能。遺憾的是 bash 建置過程並沒有使用這些功能文件中有詳細說明,也不使用參數來允許建置時處理手冊頁。
由於文件和更改的數量很少,因此我建議採用半手動方法,即編寫一個小腳本來在安裝前進行更改。您可以選擇使用安裝手錶確保您在安裝過程中捕獲所有內容,但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
(儘管它沒有重命名)。