退出重定向命令的代码

时间:2013-07-12 12:48:42

标签: linux bash scripting

所以我想验证特定命令的退出代码

runuser -s /bin/bash @user_name -c $command > /dev/null 2>&1 &

如何查找命令runuser -s /bin/bash @user_name -c $command是否正确执行? 我尝试使用$?,但它不起作用,因为它始终为0(重定向的结果为0)

如何找到该命令的退出代码?

2 个答案:

答案 0 :(得分:11)

由于任务的后台处理(通过&),重定向,退出代码不可用。

您应该使用wait来获取后台任务的退出代码。

  

wait命令停止脚本执行,直到所有作业都在运行   后台已终止,或直到作业号或进程ID   指定为选项终止。它返回退出状态   等待命令。

答案 1 :(得分:3)

您可以在bash中使用$!来获取上一个后台进程的pid。然后你可以做wait pid。这将一直等到带有pid的进程完成。

因此,对于您的脚本,您可以执行以下操作:

runuser -s /bin/bash @user_name -c $command > /dev/null 2>&1 &
myPid=$!
wait $myPid
status=$?
echo "Exit status of the process with pid: $myPid is $status"