我们正在编写使用set -e
作为策略的shell脚本,这意味着如果出现任何未处理的非零退出状态,它将退出。
#!/bin/sh -e
if some_command; then
experience_happyness
else
print error status of some_command to log or standard error
experience_sadness
exit 1
fi
$?
表达式在else分支的开头评估为0
。如果我不在some_command
内运行if
,那么最终的错误会立即终止shell脚本。
如果set -e
生效而不终止脚本,我如何知道程序的退出状态?
如果没有纯bash
解决方案,我也对sh
特定解决方案感兴趣。
编辑:我的不好。作为@"那个其他人"当我告诉他" $?"我回答说我错了。在else分支的开头评估为0。我试过了,但是在尝试时我犯了一些错误。遗憾。
我认为我们可能会因为专业品质的答案而保留这个问题。我们应该吗?
答案 0 :(得分:4)
$?表达式在else分支的开头计算为0。
不,它没有。
#!/bin/sh -e
some_command() { return 42; }
if some_command; then
echo "Worked"
else
echo "Command failed with $?"
exit 1
fi
将打印Command failed with 42
。