我知道$!会给予我最后一个命令的pid和$?会给予我最后一个命令的退出值,但我如何在一个shell命令中获得它们?谢谢
ql3eal8s1#
简答
不可能在一个命令中同时获得PID和退出状态。您至少需要两个命令:一个保存PID($!),另一个保存wait并获取退出代码($?)。
$!
wait
$?
说明
根据文件:!扩展到从当前shell执行的最新后台命令的十进制进程ID(请参阅列表)。所以$!没有被扩展为“最后一个命令的PID”,例如,您需要在命令之后使用&来调度命令以在后台执行。在命令退出之前,不可能获得它的退出代码--我们需要wait。wait命令返回最后一个ID的状态;如果ID无效或给出的选项无效,则失败。(其中ID是传递给命令的最后一个位置参数。)
!
&
ID
示例
ls >/dev/null 2>&1 & pid=$! wait $pid exit_code=$? printf 'PID: %d Exit code: %d\n' $pid $exit_code
注意$!扩展为最近的后台命令的十进制进程ID有关$!、$?等特殊shell参数的信息,请参阅Shell命令语言特殊参数。
1条答案
按热度按时间ql3eal8s1#
简答
不可能在一个命令中同时获得PID和退出状态。您至少需要两个命令:一个保存PID(
$!
),另一个保存wait
并获取退出代码($?
)。说明
根据文件:
!
扩展到从当前shell执行的最新后台命令的十进制进程ID(请参阅列表)。所以
$!
没有被扩展为“最后一个命令的PID”,例如,您需要在命令之后使用&
来调度命令以在后台执行。在命令退出之前,不可能获得它的退出代码--我们需要
wait
。wait
命令返回最后一个ID的状态;如果ID无效或给出的选项无效,则失败。
(其中
ID
是传递给命令的最后一个位置参数。)示例
注意
$!
扩展为最近的后台命令的十进制进程ID
有关
$!
、$?
等特殊shell参数的信息,请参阅Shell命令语言特殊参数。