відключення контролю роботи в баші (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, це не має ефекту.
Мартін Вегтер

Ах, ти маєш рацію. Це локалізовано під конкретний сценарій у той момент. Тоді баш стверджує, що за замовчуванням є.
Неправдиві

складання мого власного башу здається досить високою ціною, яку потрібно заплатити за відключення контролю за роботою. Повинно бути якесь налаштування, яке працює через .bashrc.
Мартін Вегтер

Оскільки це все встановлено під час компіляції, не потрібно мати спосіб змінити його у файлі налаштування, який завантажується після запуску оболонки. Проблема тут полягає в тому, що хтось вирішив скласти контроль bash WITH, включений як типовий для дистрибутива, який ви використовуєте. Я не можу реально особисто сперечатися з цим, оскільки використовую різні контрольні роботи щодня на роботі, і я не впевнений, що міг легко налаштуватись на життя без цього. Зрозуміло, це мій досвід, а не ваш ... ось чому існують прапори при складанні, щоб дати варіанти.
Неправдиві

4

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

Ви можете додати цю команду stty до свого ~/.bash_profileабо ~/.profile, вийти з системи, знову увійти.


це фактично працює для деяких програм. Але наприклад для mcцього не працює. Що в основному підтверджує те, що ви сказали. Чи не існує універсального рішення, яке працює для всіх?
Мартін Вегтер

Я щойно помітив, set +mпрацює для mc, але тільки якщо я набираю його в терміналі, а не в .bashrcабо .profile.
Мартін Вегтер

3

Або я щось пропускаю, і ця функція може бути корисною?

Щоб відповісти на цю частину питання: Cz / fgcombo є важливим для мого робочого процесу vim. Наприклад, я вважаю за краще Cz> git commit> fgза допомогою GIT обгорток всередині Vim.

Cz допомагає лікувати оболонку як IDE, дотримуючись принципу " робити одне ". (Це замість "редактора як IDE").


1
^Zабсолютно все-таки корисно - але це було ще корисніше, коли термінал був не вікном, а коробкою перед вами. А у вас був лише один.
Volker Siegel

2

Додайте trap "" SIGTSTPу свій сценарій. Він вловить сигнал і проігнорує його.

#!/bin/bash
trap "" SIGTSTP
watch date
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.