为什么 bash 不通过 yum 更新?

为什么 bash 不通过 yum 更新?

我正在尝试在 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

他们将运行较新的版本。

相关内容