我正在尝试在 CentOS 7 上更新 bash - 我的项目至少需要 4.4,而其默认 shell 是 4.2。它是一个生产服务器,所以我实际上只想要一个新版本的 bash 作为默认 shell,仅此而已;我不想搞乱太多或更新任何其他内容。
无论如何,运行:
yum update bash
回报
No packages marked for update
命令:
yum repolist all
显示 CentOS 7 更新存储库已启用(但不是 CentOS 7.* 基本/更新)。
结果,这个命令:
yum --enablerepo=updates update bash
什么也没做。
如果有帮助的话,我可以分享我的 CentOS-Base.repo 文件。我究竟做错了什么?
答案1
像 RedHat(以及 CentOS)这样的发行版的要点是它是稳定的;它并不具有每个软件的最新版本,它具有一致的版本。对于 CentOS7,当前版本是bash-4.2.46-33.el7
. RedHat 将向后移植安全修复程序,但可能不会向后移植功能增强,因为它们可能会导致兼容性问题。
如果您需要不同的版本,那么您可能需要从源代码编译它并将其放置在非标准位置(例如$HOME/bin/bash
)。不要覆盖,/bin/bash
因为操作系统可能随时通过yum update
.
相比之下,RedHat 8(CentOS8)有bash 4.4,Debian 10有bash 5.0
答案2
如果隐含的问题是,如何将 bash 更新到 4.4:
wget http://ftp.gnu.org/gnu/bash/bash-4.4.18.tar.gz
tar xf bash-4.4.18.tar.gz
cd bash-4.4.18/
./configure
make
make install
sh
bash -version
答案3
Bash 4.2.46 是 CentOS 7 和 RHEL 7 的当前版本。Bash 4.4.19 是 CentOS 8 和 RHEL 8 的当前版本。BASH 4.4 不在 CentOS 7 和 RHEL 7 的存储库中,这就是为什么yum
不会更新的原因到它。
要获得 4.4,您必须在 等位置以外的位置从源代码构建它/bin
,/home/bash
将该位置放入bash
/etc/shells 中的二进制文件(仅当您想为其他用户更改它时才以 root 身份),然后使用chsh -s /path/to/new/bash
将您的登录 shell 更改为 Bash 4.4。
如果您只想使用较新版本的 bash 运行脚本,请在构建后将脚本中的 shebang 更改为:
#!/path/to/new/bash
他们将运行较新的版本。