在我的脚本内部我需要以另一个用户身份运行两个脚本,所以我使用了以下行:
su otherUser -c "firstScript;secondScript;status=$?"
echo "returning $status"
return $status
问题是$ status将始终返回0.我测试了secondScript失败(错误的参数)。不确定是不是因为我退出了otherUser,或者$ status实际上是su命令的结果。有什么建议吗?!
答案 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