在 if 语句中捕获 bash 退出代码

Zum*_*rio 1 bash if-statement exit-code

如果我直接使用单个命令对退出代码进行简单测试:

[user@localhost ~]$ date
Tue Sep  8 14:00:11 CEST 2020
[user@localhost ~]$ echo $?
0
[user@localhost ~]$ dat
bash: dat: command not found...
[user@localhost ~]$ echo $?
127
Run Code Online (Sandbox Code Playgroud)

但是,如果我想将它们放入 if 语句中,我发现对于退出代码 0,输出正常,但是,对于“命令未找到”代码(应该是 127),它返回“1”。

[user@localhost ~]$ date 
Tue Sep  8 14:02:18 CEST 2020
[user@localhost ~]$ if [ $? -eq 0 ]; then   echo "Success: $?"; else   echo "Failure: $?" >&2; fi
Success: 0
[user@localhost ~]$ dat
bash: dat: command not found...
[user@localhost ~]$ if [ $? -eq 0 ]; then   echo "Success: $?"; else   echo "Failure: $?" >&2; fi
Failure: 1
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

use*_*428 7

如果您想捕获并打印每个命令的退出代码,我不会费心将其保存在变量中。仅当您稍后再次需要此退出代码,或者存在一些您不认为是错误的非零退出代码时,才有必要执行此操作。

相反,我会这样做:

替换您现有的

command_to_verify
Run Code Online (Sandbox Code Playgroud)

经过

if command_to_verify
then
  echo Success
else
  echo Failure: $?
fi
Run Code Online (Sandbox Code Playgroud)