如何解决在if语句中捕获bash退出代码
如果我直接使用单个命令对退出代码进行简单测试:
[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
但是,如果我想将它们放入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
我想念什么?
解决方法
如果您想捕获并打印每个命令的退出代码,我不会费心将其保存在变量中。仅在以后需要此退出代码,或者有些非零退出代码不被视为错误时,才有必要。
相反,我会这样做:
替换现有的
command_to_verify
作者
if command_to_verify
then
echo Success
else
echo Failure: $?
fi
,
每个命令都有自己的退出状态,因此命令[
1 将覆盖$?
。为了避免这种情况,请将退出代码保存到变量中,然后在if语句中使用它;
le=$?
if [ "$le" -eq 0 ]; then echo "Success: $le"; else echo "Failure: $le" >&2; fi
1:
单括号[
实际上是测试命令的别名,不是语法。有关更多信息,请检查此comment on unix.stackexchange
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。