我正在尝试执行命令,然后在失败时显示其返回码:
if ! /bin/false
then
tee >(mail -s "failed" $USER) <<EOF
Failed with code $?
EOF
fi
以上总是对我说'0',但我期待看到'1'。
以下是有效的,但它并不简单,也不适合set -o errexit
。
/bin/false
ret=$?
if [ $ret -ne 0 ]
then
tee >(mail -s "failed" $USER) <<EOF
Failed with code $ret
EOF
fi
答案 0 :(得分:2)
您的初步测试存在缺陷。
尝试
if /bin/false ;then
echo status was $?
else
echo "failed with status = $?"
fi
<强>输出强>
failed with status = 1
要隔离使用true和false,请在cmd行上尝试这些
/bin/true ; echo $?; /bin/false; echo $? ; ! /bin/false; echo $?
<强>输出强>
0
1
0
IHTH
答案 1 :(得分:2)
我会建议这种方法:
/bin/false || echo "Failed, return code = $?"