我正在尝试在 bash 中运行命令( gerrit query )并将其分配给变量。我正在使用这是一个 bash 脚本文件,并且我想处理如果命令抛出错误(即如果 gerrit 查询失败)的情况,我应该能够处理相同的情况。
例如:
var=`ssh -p $GERRIT_PORT_NUMBER $GERRIT_SERVER_NAME gerrit query --current-patch-set $PATCHSET_ID`
我知道我可以使用 $? 检查最后的退出状态?在 bash 中,但对于上述情况,对变量的赋值会覆盖早期的退出状态(即 gerrit 查询失败状态),并且上述命令永远不会失败。它总是正确的。
你能告诉我是否有办法处理命令的退出状态,即使它被分配给 bash 中的变量。
更新:
我在这里的假设是错误的,即分配导致退出状态被覆盖,而查尔斯的例子和他的回答中的解释是正确的。退出状态被覆盖的真正原因是我将上述命令的输出传送到 sed 脚本,这是覆盖退出状态的罪魁祸首。我发现以下内容帮助我解决了这个问题。https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another/73180#73180 在 Bash 中管道输出和捕获退出状态
我正在尝试的完整命令。
变量=ssh -p $GERRIT_PORT_NUMBER $GERRIT_SERVER_NAME gerrit query --current-patch-set $PATCHSET_ID | sed 's/message//'