仅在bash中存储错误消息

我是bash的初学者,所以如果这是一个基本问题或有语法问题,但我无法在任何地方找到答案,我表示歉意。我想运行一个命令,如果失败,请检查错误消息是否与某个字符串匹配。这是我有:仅在bash中存储错误消息

err_msg=`./command input.txt 2>&1` 

if [$? -eq 1]

then

if [err_msg -eq "Error: timeout"]

then

#do something

fi

fi

这是正确的方法来做到这一点?如果我使用第一行来定义错误消息err_msg,那么$?仍然存储命令的通过/失败状态?另外,如果命令通过会发生什么? err_msg会是空白吗?

回答:

  • 不要使用命令替换的旧式反引号形式,使用$(command)代替
  • 使用[[ ]]进行测试,而不是[ ]因为它有more features and fewer surprises
  • -eq用于整数比较。对于字符串比较,使用===
  • 注意命令可能失败,退出状态等比1,因此是更好的测试非零状态:! [[ $? -eq 0 ]]
  • 您可以使用$?测试退出最后一个命令的状态,或者你可以直接if测试:if command; then echo CMD OK; fi
  • 您可以将命令的输出到一个变量,而测试它的退出代码

使用上述几点,你可以重写你的代码是这样的:

if ! err_msg=$(./command input.txt 2>&1) 

then

if [[ $err_msg = "Error: timeout" ]]; then

echo "Doing something.."

fi

fi

以上是 仅在bash中存储错误消息 的全部内容, 来源链接: utcz.com/qa/257556.html

回到顶部