wyłączanie kontroli zadań w bash (CTRL-Z)


12

Czasami zdarza mi się, że naciskam CTRL+ Zprzez przypadek, a moja aplikacja znika w tle. Wiem, że mogę to przywrócić fg, więc nie jest to taka wielka sprawa. Ale i tak zastanawiam się, czy to job controlwyłączyć. W całym moim życiu nie pamiętam jednego momentu, kiedy go potrzebowałem, to po prostu wydaje mi się reliktem z przeszłości.

Czy można job controlcałkowicie wyłączyć ? A może coś mi brakuje, a ta funkcja może być przydatna? Jak miałbym to wyłączyć w moim.bashrc

AKTUALIZACJA:

Próbowałem set +mzgodnie z sugestią @Falsenames. Działa to jednak tylko wtedy, gdy wpisuję go w terminalu. Dodanie set +mdo mojego .bashrcnie ma żadnego efektu.


1
Ponowna aktualizacja: fakt, że $-(lista aktywnych opcji) już nie zawiera, mgdy umieszczasz set +mw swoich ~/.bashrcsugestiach, sugeruje, że Bash próbuje wyłączyć kontrolę zadań, ale ostatecznie nie robi tego z powodu błędu - być może warto zgłosić za pośrednictwem bug-bash@gnu.org
mklement0

Odpowiedzi:


8

Możesz dodać następujące elementy do wiersza poleceń, aby przestać korzystać z trybu monitorowania.

set + m

Jeśli naprawdę potrzebujesz później funkcji ctrl-z, możesz po prostu wpisać „set -m”, aby włączyć monitorowanie dla tej sesji.

Od bata człowieka . Zauważ, że dotyczy to opcji „-m”, a „+ m” przełącza to ustawienie, aby wyłączyć.

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. 

Jako ostatni wysiłek, możesz ręcznie skompilować wersję bash bez flagi „--enable-job-control”. Oto krótki przewodnik instalacji od GNU. Jeśli zdecydujesz się pójść tą drogą, NIE zastępuj / bin / bash na wypadek, gdyby procesy działające w tle przebiegały przez bash, oczekując kontroli zadań. Zamiast tego utwórz plik /bin/bash.alt lub inny plik. Domyślną powłokę można zmienić na tę alternatywną, uruchamiając usermod lub edytując / etc / passwd jako root.


set +mdziała w terminalu, ale kiedy dodam go do mojego .bashrc, nie ma to żadnego efektu.
Martin Vegter

Ach, masz rację. W tym momencie jest to zlokalizowane na konkretnym skrypcie. Następnie bash potwierdza swoje wartości domyślne.
Falsenames,

kompilowanie własnego basha wydaje się dość wysoką ceną za wyłączenie kontroli zadań. Musi istnieć jakieś ustawienie, które działa .bashrc.
Martin Vegter,

Ponieważ wszystko jest ustawione w czasie kompilacji, nie musi istnieć sposób na zmianę tego w pliku instalacyjnym, który ładuje się po uruchomieniu powłoki. Problem w tym, że ktoś zdecydował się na kompilację bash Z włączoną kontrolą zadań jako domyślną dla używanej dystrybucji. Nie jestem w stanie osobiście się temu sprzeciwić, ponieważ codziennie używam różnych kontroli pracy i nie jestem pewien, czy bez tego mógłbym łatwo dostosować się do życia. To prawda, moje doświadczenie, a nie twoje ... dlatego przy kompilacji są flagi, które dają opcje.
Falsenames,

4

stty susp undefwyłączy inicjowany przez klawiaturę sygnał zawieszenia dla większości programów, jednak polecenia takie jak vimi emacsmające specyficzne powiązania Ctrl-Zbędą musiały zostać indywidualnie skonfigurowane ponownie.

Możesz dodać to polecenie stty do swojego ~/.bash_profilelub ~/.profilewylogować się, zalogować ponownie.


to faktycznie działa w przypadku niektórych programów. Ale na przykład mcnie działa. Co w zasadzie potwierdza to, co powiedziałeś. Czy nie ma uniwersalnego rozwiązania, które działałoby dla wszystkich?
Martin Vegter,

Właśnie zauważyłem, set +mdziała mc, ale tylko wtedy, gdy wpisuję go w terminalu, a nie w .bashrclub .profile.
Martin Vegter,

3

A może coś mi brakuje, a ta funkcja może być przydatna?

Aby odpowiedzieć na tę część pytania: Cz / fgcombo jest niezbędne dla mojego przepływu pracy w vimie. Na przykład wolę Cz git commit>> fgniż używanie git wrapperów z poziomu vima.

Cz pomaga w traktowaniu powłoki jako IDE, zgodnie z zasadą „ rób jedną rzecz ”. (To zamiast „edytor jako IDE”).


1
^Zjest absolutnie nadal przydatny - ale był jeszcze bardziej użyteczny, gdy terminal nie był oknem, ale pudełkiem przed tobą. I miałeś tylko jeden.
Volker Siegel,

2

Dodaj trap "" SIGTSTPw swoim skrypcie. Złapie sygnał i zignoruje go.

#!/bin/bash
trap "" SIGTSTP
watch date
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.