我正在尝试将 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
(尽管它没有重命名)。