是否有可能在'if'命令中执行语句的返回码?

时间:2013-07-24 15:52:48

标签: ksh

我正在尝试执行命令,然后在失败时显示其返回码:

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

2 个答案:

答案 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 = $?"