我试图检查是否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.3
与1.2.4
,两者在数字比较中将被截断为1.2
并声明相等,但如果你想比较两个不同的版本,如12.3
与5.7
,5.7
将被认为在字符串比较中更大。