在使用bash的Unix系统上检测到shellshock问题后,我必须创建一个脚本作为我在公司实习的一部分,以便更新bash。
安装更新的IBM bash * .rpm的先决条件是:
我在处理第二部分时遇到问题,因为真正的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
命令没有成功。
答案 0 :(得分:1)
我猜您可以直接使用$BASH_VERSION
变量:
$ echo "$BASH_VERSION"
4.2.47(1)-release
来自man bash
:
外壳变量
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版本是否低于或高于所需版本,最终结果只需要head
和tail
。
来自man sort
:
-V , - version-sort
文本中的自然类型(版本)数字
答案 1 :(得分:1)
好像你正试图获得这样的输出,
$ bash -version | awk -F'[ (]' '/version/{print $4;exit}'
4.3.11