отключение управления заданиями в 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.


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").


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

2

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

#!/bin/bash
trap "" SIGTSTP
watch date
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.