Как сказать bash не выдавать предупреждения "невозможно установить группу процессов терминала" и "нет управления заданиями в этой оболочке", когда он не может утверждать управление заданиями?

Для создания новой интерактивной оболочки bash я звоню bash -i, Из-за проблем с моей средой, bash не может установить управление заданиями (я использую cygwin bash в GNU emacs) и выдает предупреждения ("не удается установить группу процессов терминала" и "нет управления заданиями в этой оболочке"). - Я должен жить с отключенным контролем работы в моей среде, но я хотел бы избавиться от предупреждения:

Как я могу сказать bash не утверждать контроль работы и не выдавать эти предупреждения? Я очевидно все еще хочу оболочку как интерактивную.

Примечание: я пытался set -m в .bashrc, но Bash по-прежнему записывает предупреждения при запуске - ~/.bashrc Файл может быть выполнен после того, как оболочка попытается установить контроль над заданием. Есть ли опция командной строки, которая будет работать?

1 ответ

Решение

man bash говорит о set параметры, которые параметры также могут быть указаны в качестве аргументов для вызова оболочки. Обратите внимание, вам нужно +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
Другие вопросы по тегам