відключення контролю роботи в баші (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.