首页 > 解决方案 > 为什么 `bash -c '...'` 会在某些(但不是全部)错误上提前终止?

问题描述

这里发生了什么?

以下按预期工作:

$ 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 提前终止,它不是任何命令的退出状态?

这里发生了什么?

标签: bashkill

解决方案


It's simple: pkill find the bash command and stops its execution. Change the search pattern and it will function:

  bash -c 'pkill -f "xyz_n""on_existent_process_xyz"; echo $?'

It's a little bit tricky: "xyz_n""on_existent_process_xyz" is the same as xyz_non_existent_process_xyz


推荐阅读