如何使 sh 脚本 return 成为执行命令的错误代码?
How to make the sh script return an error code from the executed command?
我写了一个简单的脚本来提示 pppd 工作。我在 pppd 文档中读到它可以 return 1-20 范围内的退出代码。如果 pppd 的值不为 0,我希望我的脚本 return pppd 的值。我尝试过这种方式,但不幸的是它失败了。
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
失败,脚本将退出并且它的值returns 将是pppd 返回的值。 (您可以显式地写 exit $?
,但这是在没有给出参数时 exit 返回的默认值,也不是必需的。)如果 pppd
成功,脚本将继续。
您的脚本的问题(除了不明智地使用 exec
,我通常会忽略它)是调用 [ $? -ne 0 ]
会重置 $?
。您可以将脚本重写为:
#!/bin/sh
pppd call "${@:-provider}"
save_val=$?
if ! [ $save_val -eq 0 ]
then
exit $save_val
fi
但这似乎过于冗长。
请注意,在您的原始脚本中,您会在行 if [ $? !-eq 0 ]
上遇到错误,因为 !-eq
不是有效的运算符。但是,您永远不会看到该错误,因为您对 exec
的早期调用使得它永远不会执行该行。
我写了一个简单的脚本来提示 pppd 工作。我在 pppd 文档中读到它可以 return 1-20 范围内的退出代码。如果 pppd 的值不为 0,我希望我的脚本 return pppd 的值。我尝试过这种方式,但不幸的是它失败了。
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
失败,脚本将退出并且它的值returns 将是pppd 返回的值。 (您可以显式地写 exit $?
,但这是在没有给出参数时 exit 返回的默认值,也不是必需的。)如果 pppd
成功,脚本将继续。
您的脚本的问题(除了不明智地使用 exec
,我通常会忽略它)是调用 [ $? -ne 0 ]
会重置 $?
。您可以将脚本重写为:
#!/bin/sh
pppd call "${@:-provider}"
save_val=$?
if ! [ $save_val -eq 0 ]
then
exit $save_val
fi
但这似乎过于冗长。
请注意,在您的原始脚本中,您会在行 if [ $? !-eq 0 ]
上遇到错误,因为 !-eq
不是有效的运算符。但是,您永远不会看到该错误,因为您对 exec
的早期调用使得它永远不会执行该行。