Macos 为什么';t`exit$?`在Bash中是否按预期工作?
我试图在脚本中传播退出代码,但当我退出$?时,它似乎总是以0退出 应要求:Macos 为什么';t`exit$?`在Bash中是否按预期工作?,macos,bash,Macos,Bash,我试图在脚本中传播退出代码,但当我退出$?时,它似乎总是以0退出 应要求: <some command> if [[ ! -z "$?" ]] then echo "Some error" exit $? fi 如果[!-z“$?”]] 然后 回应“一些错误” 退出$? fi 只要写下以下内容: your_command || exit …或者,如果要记录: your_command || { retval=$?; echo "Failed" >&
<some command>
if [[ ! -z "$?" ]]
then
echo "Some error"
exit $?
fi
如果[!-z“$?”]]
然后
回应“一些错误”
退出$?
fi
只要写下以下内容:
your_command || exit
…或者,如果要记录:
your_command || { retval=$?; echo "Failed" >&2; exit "$retval"; }
由于exit
使用$?
作为默认退出状态,因此前者是最简单、最短的方法
echo "Some error"
exit $?
$?
是echo
命令的退出状态,它几乎总是0
认为$?
非常脆弱;任何命令都会把它击垮
而且,-z
是错误的测试;它测试其参数是否为空字符串,而不是它是否具有值0
如果要使用命令的退出状态晚于下一个命令的退出状态,请将其保存:
<some command>
status=$?
if [[ "$status" -ne 0 ]]
then
echo "Some error" 1>&2
exit $status
fi
状态=$?
如果[[“$status”-ne 0]]
然后
回显“某些错误”1>&2
退出$status
fi
您的脚本是什么样子的?仅供参考,exit
使用的默认状态是$?
,因此exit$?
是完全冗余的。我们不可能在不查看脚本的情况下回答此问题。很有可能它正在进行日志记录或为$?
设置新值的操作test-z$?
将始终退出false。总是。不管值是什么——因为$?
永远不会是空字符串,这是test-z
检查的唯一内容。