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.