Impedire a bash di visualizzare “Fatto” al termine dell'esecuzione di un comando in background


34

Se eseguo un comando in background con &, in questo modo:

sleep 2 &

quando termina il comando, ottengo "Fatto". Come posso evitare di vedere il messaggio "Fine"?

Risposte:


34

Esegui il comando in una subshell:

(sleep 2 &)

si noti che usando questo, si perde il controllo dei lavori all'interno della shell del chiamante ( jobsnon mostrerà nulla).
maggio

36

Eseguire la shell integrata:

$ set +m

Funziona disattivando la "modalità monitor" in modo che la shell non segnali di terminare i lavori in background.

Sebbene esegua il comando in una subshell come:

$ (sleep 2&)

... disabiliterà anche il messaggio, l'unica ragione per cui funziona è perché la modalità monitor è abilitata di default solo per le shell interattive. Cioè, la subshell evita il messaggio eseguendo una shell aggiuntiva che ha un "set + m" automatico.


4
Si noti che questa uscita non viene eseguita dallo sleep. È la shell bash che ti informa solo sul lavoro in background finito.
flolo,

8

Vorrei chiarire le due risposte precedenti. Se quello che vuoi non è mai vedere il messaggio Fatto da qualsiasi comando nella tua shell, set +mè la strada da percorrere. Inseriscilo nel tuo .profile e / o .bashrc ed esegui. Si noti tuttavia che se si digita questo:

set +m
sleep 2 &
set -m

e il sonno termina dopo la finale set -m, otterrai comunque il messaggio fatto.

Se si desidera disabilitare il messaggio per una singola chiamata di comando, la tecnica subshell (sleep 2 &)è la strada da percorrere.

In tutta onestà, lo sapevo solo set +m, quindi +1 su Wooble per avermi illuminato. Tuttavia, vale la pena notare che quale delle due soluzioni desiderate dipende da cosa stai cercando di fare.


0

Senza una subshell , è possibile effettuare le seguenti operazioni:

silent_background() {
    { 2>&3 "$@"& } 3>&2 2>-
    disown &>/dev/null  # Close STD{OUT,ERR} for silence if job has already completed
}

silent_background sleep 5

Sulla base di questa risposta .

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.