Можно ли отключить режим монитора в Bash при вызове

Видимо, я действительно прав, он не ждет IPv6. Я разместил эту проблему на Github проекта, и кто-то пометил ее как RFE :https://github.com/systemd/systemd/issues/2037

.

Проверьте это, чтобы найти решение, (отключающее IPv6 DAD ), которое временно устраняет проблему:http://serverfault.com/questions/766253/ensure-systemd-wait-for-ipv6-before-start-service-unit

3
03.09.2021, 11:06
2 ответа

Кажется невозможным отключить режим монитора для интерактивного сеанса bash с параметрами/аргументами строки команды -во время вызова, если только вы не читерите. Я определил это, покопавшись в исходниках, в первую очередь в файлах shell.c и jobs.c . Я клонировал репозиторий локально с помощью git clone git://git.savannah.gnu.org/bash.git, чтобы его было легче искать.

Невозможно отключить режим монитора во время вызова, потому что последовательность запуска bash включает режим монитора после обработки различных параметров/аргументов. Даже если вы вызовете bash +o monitor, где bash временно установит параметр в функции parse_shell_options, позже он снова вызовет функцию с именем set_job_control(, находясь в интерактивном режиме ), который устанавливает глобальный переменная "job _control" в true (значение "интерактивного" аргумента ).

Обратите внимание, что потенциальный +Oмаршрут магазина через функцию run_shopt_alistявляется тупиком -, несмотря на то, что интерактивная команда shoptможет отключить режим монитора с помощью shopt -o -u monitor, поскольку режим монитора не является родной вариант шопта.

Метод читерства использует внешний файл;вы должны создать альтернативный файл bashrc, содержащийset +m(и, возможно, источник вашего реального ~/.bashrc ), а затем вызвать bash как:

bash --rcfile /path/to/that/alternate_bashrc_file

Это работает, потому что синтаксический анализ rc-файла выполняется (с помощьюrun_startup_filesфункции)после вызова set_job_control, поэтому он может окончательно установить параметр оболочки.

1
06.09.2021, 01:26

Можно отключить монитор:

$ bash +o monitor -c 'shopt -op monitor'
shopt +o monitor

Но только для не -интерактивных оболочек (скрипты, однострочные (-c )например ).

Для интерактивных оболочек, даже если вы пытаетесь, монитор снова -включен:

$ bash +o monitor
~/.bashrc sourced
$ shopt -op monitor
set -o monitor
$ exit

Но поскольку файл bashrcзагружается (, как показано выше ), вы можете включить строку, чтобы отключить его.

1
06.09.2021, 01:55

Теги

Похожие вопросы