小编LL3*_*LL3的帖子

作业控制真的应该在子 shell 和脚本中得到支持吗?

场地小

\n\n

我经常使用子 shell 来执行涉及更改Shell 执行环境的操作,以免影响主 shell。我经常从交互式 shell 中执行此操作,有时也从脚本中执行此操作。

\n\n

启用或禁用作业控制当然是这些操作之一,无论出于何种原因,当需要精细控制进程分组时,我一直在随意使用此功能。

\n\n

然而,作为 Bash 用户,我注意到这种自由在最新版本中得到了加强:直到 v4.3,作业控制才被允许并在交互式子 shell 中完全工作,但自 v4.4 以来就不再这样了。在那里,它仍然可以在交互式子 shell 中使用,但不能完全工作(见下文)。它在脚本内仍然可以很好地工作,但是,自 v5 以来,至少一个作业控制的特定用例(即 的细粒度处理Ctrl+C)已经更加严格,使其只能从脚本内的子 shell 内进行管理..!

\n\n

因此,我开始产生怀疑,因此花了一些时间对一些常见的 shell 进行了示例综合测试,所有这些测试都是在 Ubuntu 19.04 上使用其测试 shell 的库存(和发行版更新)版本执行的。

\n\n

一些背景

\n\n

我注意到bash, yash, mksh, 和zshdo Honorset -m在子 shell 中,而dashkshdo 则没有。ksh即使在测试结束时被拦住也很奇怪。

\n\n

TL; DR:接下来是我刚才所说的漫长的演示会议:

\n\n
$ bash -c \'echo start; (set -bm; …
Run Code Online (Sandbox Code Playgroud)

job-control shell-script subshell

5
推荐指数
0
解决办法
458
查看次数

标签 统计

job-control ×1

shell-script ×1

subshell ×1