disabilitazione del controllo dei lavori in bash (CTRL-Z)


12

A volte mi capita di premere CTRL+ Zper caso e la mia applicazione scompare in background. Lo so, posso riportarlo indietro fg, quindi non è un grosso problema. Ma mi chiedo job controlcomunque di spegnerlo. In tutta la mia vita, non ricordo un caso in cui ne avevo bisogno, mi sembra solo una reliquia del passato.

Va bene disabilitare job controlcompletamente? O mi sto perdendo qualcosa e questa funzione può essere utile? Come lo disabiliterei nel mio.bashrc

AGGIORNARE:

Ho provato set +mcome suggerito da @Falsenames. Tuttavia, questo funziona solo quando lo scrivo nel terminale. L'aggiunta set +mal mio .bashrcnon ha alcun effetto.


1
Nuovo aggiornamento: il fatto che $-(elenco di opzioni attive) non contenga più mquando ci si inserisce set +mnel tuo ~/.bashrcsuggerisce che Bash sta cercando di disattivare il controllo del lavoro, ma alla fine non lo fa a causa di un bug - potrebbe valere la pena segnalarlo tramite bug-bash@gnu.org
mklement0

Risposte:


8

È possibile aggiungere quanto segue nella riga di comando per interrompere l'utilizzo della modalità di monitoraggio.

impostare + m

Se hai davvero bisogno della funzionalità ctrl-z in un secondo momento, puoi semplicemente digitare 'set -m' per abilitare il monitoraggio per quella sessione.

Da uomo bash . Nota che questo è per '-m', con "+ m" abilita / disabilita quell'impostazione per disabilitare.

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. 

Come ultimo sforzo, potresti voler compilare manualmente una versione di bash senza il flag "--enable-job-control". Ecco una guida rapida all'installazione da GNU. Se si sceglie di seguire questa strada, NON sostituire / bin / bash nel caso in cui i processi in background attraversino bash prevedano il controllo del lavoro. Invece, crea un /bin/bash.alt o un altro file. La shell predefinita può essere cambiata in questa alternativa eseguendo usermod o modificando / etc / passwd come root.


set +mfunziona nel terminale, ma quando lo aggiungo al mio .bashrc, non ha alcun effetto.
Martin Vegter,

Ah, hai ragione. È localizzato nello script specifico a quel punto. Quindi bash afferma le sue impostazioni predefinite.
Falsenames,

compilare il mio bash sembra un prezzo piuttosto alto da pagare per disabilitare il controllo del lavoro. Ci devono essere alcune impostazioni che funzionano tramite .bashrc.
Martin Vegter,

Poiché questo è tutto impostato al momento della compilazione, non è necessario che sia necessario un modo per modificarlo in un file di installazione che viene caricato dopo l'avvio della shell. Il problema qui è che qualcuno ha deciso di compilare bash con il controllo del lavoro abilitato come predefinito per la distribuzione che si sta utilizzando. Non posso davvero contestarlo personalmente, dal momento che utilizzo vari controlli del lavoro ogni giorno sul lavoro e non sono sicuro di potermi adattare facilmente alla vita senza di essa. Certo, questa è la mia esperienza, non la tua ... ecco perché ci sono bandiere sulla compilazione, per dare opzioni.
Falsenames,

4

stty susp undefdisabiliterà il segnale di sospensione avviato dalla tastiera per la maggior parte dei programmi, tuttavia i comandi simili vime emacsche hanno legami specifici per Ctrl-Zdovranno essere riconfigurati singolarmente.

È possibile aggiungere quel comando stty al proprio ~/.bash_profileo ~/.profile, disconnettersi, accedere nuovamente.


questo funziona effettivamente per alcuni programmi. Ma per esempio perché mcnon funziona. Il che sostanzialmente conferma ciò che hai detto. Non esiste una soluzione universale che funzioni per tutti?
Martin Vegter,

Ho appena notato, set +mfunziona per mc, ma solo se lo scrivo nel terminale, non in .bashrco .profile.
Martin Vegter,

3

O mi sto perdendo qualcosa e questa funzione può essere utile?

Per rispondere a questa parte della domanda: Cz / fgcombo è essenziale per il mio flusso di lavoro di vim. Ad esempio, preferisco Cz>git commit > fga utilizzare i wrapper git dall'interno vim.

Cz aiuta a trattare la shell come IDE, conforme al principio " fai una cosa ". (Questo invece di "editor come IDE").


1
^Zè assolutamente utile, ma era ancora più utile quando un terminale non era una finestra, ma una scatola di fronte a te. E tu ne avevi solo uno.
Volker Siegel,

2

Aggiungi il trap "" SIGTSTPtuo script. Catturerà il segnale e lo ignorerà.

#!/bin/bash
trap "" SIGTSTP
watch date
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.