如何使sh脚本从执行的命令中返回错误代码



我写了一个简单的脚本,它将提示pppd工作。我在pppd文档中读到,它可以返回1-20范围内的退出代码。如果pppd的值不是0,我希望我的脚本返回它。我试过这种方法,但不幸的是失败了。

myscript.sh:

#!/bin/sh
exec pppd call ${@:-provider}
if [ $? !-eq 0 ]
then
exit $?
fi

如何从pppd获取退出代码?

只需执行:

#!/bin/sh
pppd call "${@:-provider}" || exit
...

if pppd call "${@:-provider}"; then : ; else exit; fi

如果pppd失败,脚本将退出,它返回的值将是pppd返回的值。(您可以显式写入exit $?,但这是exit在没有给定参数且不必要时返回的默认值。(如果pppd成功,脚本将继续。

您的脚本的问题(除了exec的不明智用法,我将忽略它(是调用[ $? -ne 0 ]会重置$?。您可以将脚本重写为:

#!/bin/sh
pppd call "${@:-provider}"
save_val=$?
if ! [ $save_val -eq 0 ]
then
exit $save_val
fi

但这似乎过于冗长。

请注意,在原始脚本中,由于!-eq不是有效的运算符,因此在行if [ $? !-eq 0 ]上会出现错误。然而,您永远不会看到这个错误,因为您对exec的早期调用使它永远不会执行该行。

最新更新