ksh su -c返回值

时间:2014-10-24 20:31:42

标签: linux ksh su

在我的脚本内部我需要以另一个用户身份运行两个脚本,所以我使用了以下行:

su otherUser -c "firstScript;secondScript;status=$?"
echo "returning $status"
return $status

问题是$ status将始终返回0.我测试了secondScript失败(错误的参数)。不确定是不是因为我退出了otherUser,或者$ status实际上是su命令的结果。有什么建议吗?!

1 个答案:

答案 0 :(得分:1)

您需要在外壳中捕获status,而不是在su调用的内壳中捕获;否则,只要内壳退出,捕获的值就会被丢弃。

这更加容易,因为su通过了它运行的命令的退出状态 - 如果该命令以非零状态退出,那么su也将如此。

su otherUser -c 'firstScript; secondScript'; status=$?
echo "returning $status"
return $status

请注意,这仅返回secondScript的退出状态(正如您的原始代码所做的那样,它是否正常工作)。如果firstScript失败,您可能会考虑要执行的操作。


现在,如果您只想返回firstScript的退出代码,那就更有趣了。在这种情况下,您需要捕获两个 shell中的退出状态:

su otherUser -c 'firstScript; status=$?; secondScript; exit $status'); status=$?
echo "returning $status"
return $status

如果您希望仅在secondScript成功时运行firstScript,并且如果其中任何一个失败,则返回非零值,这将再次变得容易:

su otherUser -c 'firstScript && secondScript'); status=$?
echo "returning $status"
return $status