如果符合条件,则在awk中执行system()方法



我试图检查是否gcc版本并基于结果执行另一个系统调用(scl enable devtoolset-7 bash)。

下面是我到目前为止尝试过的

gcc --version | awk '/gcc/ && ($3+0)<7.0{print "Current Version",$3,"is less than 7.5" system("scl enable devtoolset-7 bash")}'

我想知道如何在工作中正确地完成这项工作。此外,如果有的话,我愿意采用其他更简单的方法来完成上述任务。

如果不需要的话,不要让awk生成子shell来调用另一个命令,从而使事情复杂化:

if [[ gcc --version | awk '/gcc/ && ($3+0)<7.0{print "Current Version",$3,"is less than 7.5"; f=1} END{exit !f}' >&2 ]]; then
scl enable devtoolset-7 bash
fi

请注意,您的测试是<7.0,但消息显示<7.5。为了确保一致性,您可能需要这样做:

if [[ gcc --version | awk -v minVer='7.0' '/gcc/ && ($3+0)<(minVer+0){print "Current Version",$3,"is less than",minVer; f=1} END{exit !f}' >&2 ]]; then
scl enable devtoolset-7 bash
fi

一般来说,软件版本不能直接作为字符串或数字进行比较,所以你可能不得不考虑你的比较。例如,如果你想比较1.2.31.2.4,两者在数字比较中将被截断为1.2并声明相等,但如果你想比较两个不同的版本,如12.35.7,5.7将被认为在字符串比较中更大。