【问题标题】:Retrieve bash version in AIX在 AIX 中检索 bash 版本
【发布时间】:2015-01-17 05:26:20
【问题描述】:

在带有 bash 的 Unix 系统上检测到 shellshock 问题后,我必须创建一个脚本作为我在公司实习的一部分以更新 bash。

安装更新的 IBM bash*.rpm 的先决条件是:

  • 安装了 bash(简单检查)
  • bash 版本低于 4.2.50

我在处理第二部分时遇到了问题,因为真正的 bash 版本是由命令 bash -version 而不是 rpm -qi bash 给出的,它本质上给出了安装包的版本/发行版(不一定是真正的 bash 版本) .

基本上,我的脚本是这样的:

if [[ bash installed ]] ; then
  if [[ bash version installed is < 4.2.50 ]] ; then
    install bash version 4.2.50
  fi
fi

bash -version返回一大堆文字,我想挑出bash的版本。

到目前为止,我使用了以下命令:

$ bash -version | grep version | awk '{print $4}' | head -n 1

返回:

4.2.50(1)-release

有没有办法检索真正的 bash 版本?我玩过sed 命令,但没有成功。

【问题讨论】:

  • 4.2.50(1)-release 有什么问题?你的预期输出是什么?您打算如何将其与 4.2.50 进行比较?

标签: bash shell unix aix


【解决方案1】:

似乎你正试图获得这样的输出,

$ bash -version | awk -F'[ (]' '/version/{print $4;exit}'
4.3.11

【讨论】:

  • 谢谢,这很有效,解决了我的问题!
【解决方案2】:

我猜你可以直接使用$BASH_VERSION变量:

$ echo "$BASH_VERSION"
4.2.47(1)-release

来自man bash

Shell 变量

BASH_VERSION

扩展为描述此 bash 实例版本的字符串。


然后,要检查版本是否低于或高于4.2.50,您可以使用sort -V 订购它们:

$ printf "%s\n%s\n" 4.2.50 $BASH_VERSION | sort -V
4.2.47(1)-release
4.2.50

$ printf "%s\n%s\n" 4.2.50 5.2.33 | sort -V
4.2.50
5.2.33

这应该足以让您确定您当前的 bash 版本是否低于或高于所需版本,最终结果只需要一些 headtail

来自man sort

-V, --version-sort

文本中自然排序的(版本)数字

【讨论】:

  • 这很好,但不幸的是,$BASH_VERSION 不会在我的服务器(AIX 5.3 到 7.1)上返回任何内容。
  • 呃,可惜了。也许您可以深入到man bash 并在“Shell 变量”部分中查找一些变量。或者当然是写echo $BASH_,然后按 Tab 键查看可用的变量。
猜你喜欢
  • 2014-02-22
  • 1970-01-01
  • 2023-03-15
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
相关资源
最近更新 更多