отключение управления заданиями в bash (CTRL-Z)

12

Иногда случается, что я нажимаю CTRL+ Zслучайно, и мое приложение исчезает в фоновом режиме. Я знаю, я могу принести это обратно fg, так что это не так уж важно. Но мне все job controlравно интересно отключить это . За всю свою жизнь я не могу вспомнить ни одного случая, когда мне это было нужно, он просто выглядит для меня как пережиток прошлого.

Это нормально, чтобы отключить job controlполностью? Или я что-то упустил, и эта функция может быть полезна? Как бы я отключить его в моем.bashrc

ОБНОВИТЬ:

Я попытался, set +mкак предложено @Falsenames. Однако это работает только тогда, когда я набираю его в терминале. Добавление set +mв мой не .bashrcимеет никакого эффекта.

Мартин Вегтер
источник
1
Повторное обновление: тот факт, что $-(список активных опций) больше не содержится, mкогда вы размещаете set +mв нем подсказку, ~/.bashrcговорит о том, что Bash пытается отключить управление заданиями, но, в конце концов, не делает этого из-за ошибки - может быть, стоит сообщить через bug-bash@gnu.org
mklement0

Ответы:

8

Вы можете добавить следующее в вашу командную строку, чтобы прекратить использовать режим мониторинга.

установить + м

Если вам действительно понадобится функциональность ctrl-z позже, вы можете просто набрать 'set -m', чтобы включить мониторинг для этого сеанса.

От человека Баш . Обратите внимание, что это для '-m', когда "+ m" отключает эту настройку.

set [+abefhkmnptuvxBCEHPT] [+o option] [arg ...] 
....
-m
    Monitor mode. Job control is enabled. This option is on by default for interactive
    shells on systems that support it (see JOB CONTROL above). Background processes 
    run in a separate process group and a line containing their exit status is printed
    upon their completion. 

В качестве последней попытки, вы можете вручную скомпилировать версию bash без флага «--enable-job-control». Вот краткое руководство по установке из GNU. Если вы решите пойти по этому пути, НЕ заменяйте / bin / bash на тот случай, если фоновые процессы проходят через bash и ожидают управления заданиями. Вместо этого создайте /bin/bash.alt или другой файл. Оболочку по умолчанию можно изменить на эту альтернативную, запустив usermod или отредактировав / etc / passwd от имени пользователя root.

Falsenames
источник
set +mработает в терминале, но когда я добавляю его в свой .bashrc, это никак не влияет.
Мартин Вегтер
Ах, ты прав. Это локализовано для конкретного сценария на тот момент. Затем Bash утверждает свои значения по умолчанию.
Falsenames
компиляция моего собственного bash кажется довольно высокой ценой за отключение контроля работы. Должна быть какая-то настройка, которая работает через .bashrc.
Мартин Вегтер
Поскольку все это устанавливается во время компиляции, необязательно должен быть способ изменить его в установочном файле, который загружается после запуска оболочки. Проблема здесь в том, что кто-то решил скомпилировать bash с включенным управлением заданиями в качестве используемого по умолчанию дистрибутива. Я не могу лично оспаривать это, так как каждый день на работе я использую различные средства контроля за работой, и я не уверен, что смог бы легко приспособиться к жизни без нее. Конечно, это мой опыт, а не ваш ... вот почему есть флаги при компиляции, чтобы дать варианты.
Falsenames
4

stty susp undefОтключит инициируемый клавиатурой сигнал приостановки для большинства программ, однако команды, подобные vimи emacsимеющие специфические привязки Ctrl-Z, должны быть перенастроены индивидуально.

Вы можете добавить эту команду в ваш ~/.bash_profileили ~/.profile, выйдите из системы, войдите снова.

Марк Плотник
источник
это на самом деле работает для некоторых программ. Но например для mcэтого не работает. Что в основном подтверждает то, что вы сказали. Разве нет универсального решения, которое работает для всех?
Мартин Вегтер
Я только что заметил, set +mработает mc, но только если я наберу его в терминале, а не в .bashrcили .profile.
Мартин Вегтер
3

Или я что-то упустил, и эта функция может быть полезна?

Чтобы ответить на эту часть вопроса: Cz / fgcombo необходим для моего рабочего процесса vim. Например, я предпочитаю Cz> git commit> fgс помощью GIT оберток внутри Vim.

Cz помогает рассматривать оболочку как IDE, соответствующую принципу « сделай одно ». (Это вместо "редактор как IDE").

denten
источник
1
^Zабсолютно все еще полезно - но это было еще более полезно, когда терминал был не окном, а коробкой перед вами. И у тебя был только один.
Фолькер Сигел
2

Добавьте trap "" SIGTSTPв свой скрипт. Он поймает сигнал и проигнорирует его.

#!/bin/bash
trap "" SIGTSTP
watch date
where23
источник