为什么不退出$?在Bash中按预期工作?

时间:2013-10-29 23:35:14

标签: macos bash

我正在尝试在我的脚本中传播退出代码,但是当我exit $?时,它似乎总是以0退出。

根据要求:

<some command>
if [[ ! -z "$?" ]]
then
    echo "Some error"
    exit $?
fi

2 个答案:

答案 0 :(得分:3)

请写下:

your_command || exit

...或者,如果你想记录:

your_command || { retval=$?; echo "Failed" >&2; exit "$retval"; }

由于exit使用$?作为其默认退出状态,因此前者是执行此操作的最简单和最短的方式。

答案 1 :(得分:1)

echo "Some error"
exit $?

$?echo命令的退出状态,几乎总是为0。

认为$?非常脆弱;任何命令都会破坏它。

此外,-z是错误的测试;它测试它的参数是否为空字符串,而不是它是否具有值0

如果要在立即以下命令中使用命令的退出状态,请将其保存:

<some command>
status=$?
if [[ "$status" -ne 0 ]]
then
    echo "Some error" 1>&2
    exit $status
fi