我写了一个简单的脚本,它将提示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
的早期调用使它永远不会执行该行。