bash - 为什么 `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 提前终止,它不是任何命令的退出状态?
这里发生了什么?
解决方案
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
推荐阅读
- gulp - 如何让 gulp.series 运行两个单独运行时成功运行的任务?
- c++ - 从命令行获取参数的问题
- regex - 如何将 Google 表格上正则表达式计算字段的结果与数据透视表相加?
- excel - 尝试在目录中搜索所有 txt 文件的内容以查找字符串,并在找到时将文件路径发布到单元格中
- hibernate - 休眠 @ManyToOne 和 @OneToMany
- laravel - 如何从最后 5 行中获取随机行?
- r - 将可编辑的闪亮数据表写入 .csv 文件
- javascript - 我可以使用 Plotly 的自定义按钮来更新多面图中的“shared_yaxes”吗?
- amazon-web-services - 通过 https 提供 S3 资源
- scala - 有人可以解释下面的代码片段中发生了什么吗?我试图理解下面的 Scala 代码