仅在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