如何告诉 bash 在无法断言作业控制时不要发出警告"cannot set terminal process group"和"no job control in this shell"?



要创建一个新的交互式 bash shell,我称之为bash -i.由于我的环境问题,bash 无法断言作业控制(我在 GNU emacs 中使用 cygwin bash)并发出警告("无法设置终端进程组"和"此 shell 中没有作业控制")。- 我必须忍受我环境中的禁用工作控制,但我想摆脱警告:

我怎么能告诉 bash 不要断言作业控制,不要发出这些警告?我显然仍然希望外壳是一个交互式的。

注意:我已经尝试过set -m.bashrc,但 bash 仍然在启动时写出警告 -~/.bashrc文件可能会在 shell 尝试断言作业控制执行。是否有可行的命令行选项?

man bashset选项,这些选项也可以指定为调用 shell 的参数。请注意,您将需要+m而不是-m。诚然,手册对此并不十分清楚。

但是,查看bash源代码(版本 4.2),显然它忽略了此标志的状态。我会说这是一个错误。

应用以下小修补程序可使bash在启动时遵守m标志。不幸的是,这意味着您将不得不重新编译bash

--- jobs.c.orig 2011-01-07 16:59:29.000000000 +0100
+++ jobs.c      2012-11-09 03:34:49.682918771 +0100
@@ -3611,7 +3611,7 @@
}
/* We can only have job control if we are interactive. */
-  if (interactive == 0)
+  if (interactive == 0 || !job_control)
{
job_control = 0;
original_pgrp = NO_PID;

在我的 linux 机器上进行了测试,默认情况下作业控制可用,因此您在 mingw 上看到的错误消息不会在此处打印。不过,你仍然可以看到bash现在尊重+m

$ ./bash --noprofile --norc
$ echo $-
himBH
$ fg
bash: fg: current: no such job
$ exit
$ ./bash --noprofile --norc +m
$ echo $-
hiBH
$ fg
bash: fg: no job control

相关内容

  • 没有找到相关文章

最新更新