这是怎么回事?
以下按预期工作:
$ bash -c 'false; echo $?'
1
但是尝试使用pkill
杀死一个不存在的进程会使bash在脚本完成之前终止。
$ bash -c 'pkill -f xyz_non_existent_process_xyz; echo $?'
[1] 21078 terminated bash -c 'pkill -f xyz_non_existent_process_xyz; echo $?'
如果我在终端中运行此命令,则会发现pkill
返回错误代码1
,就像false
命令那样:
$ pkill -f xyz_non_existing_process_xyz; echo $?
1
所以这两个命令都返回相同的状态代码...所以有什么区别!?
我尝试了多种方式包装命令。例如:
$ bash -c '(pkill -f xyz_non_existent_process_xyz || true); echo $?'
[1] 21309 terminated bash -c '(pkill -f xyz_non_existent_process_xyz || true); echo $?'
所以看起来是什么原因导致bash提前终止,而不是任何命令的退出状态?
这是怎么回事?
答案 0 :(得分:3)
很简单:pkill
找到bash命令并停止执行。更改搜索模式,它将起作用:
bash -c 'pkill -f "xyz_n""on_existent_process_xyz"; echo $?'
有点棘手:"xyz_n""on_existent_process_xyz"
与xyz_non_existent_process_xyz
相同