5

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

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

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

我怎样才能找到该命令的退出代码?

4

2 回答 2

11

由于任务的背景(通过&),退出代码不可用,而不是重定向。

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

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

于 2013-07-12T12:51:25.077 回答
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"
于 2013-07-12T13:08:24.437 回答