Come eseguire lo sfondo di una catena di comandi?


15

Voglio mettere in background una catena di comando come cp a b && mv b c && rm a.

Ho provato a farlo cp a b && mv b c && rm a &ma questo fa da sfondo all'ultimo processo.

Come faccio a mettere in background una catena di comandi?

Risposte:


22

cp a b && mv b c && rm a &è corretta. &ha una precedenza inferiore a &&. In effetti &ha una precedenza inferiore rispetto a qualsiasi altra cosa ;e newline: &è nella stessa categoria sintattica di ;, la differenza è che ;esegue l'elenco dei comandi in primo piano mentre lo &esegue in background. Puoi testarlo tu stesso:

$ dash -c 'sleep 2 && echo waited & echo backgrounded'
backgrounded
$ waited

Lo stesso vale per pdksh, ksh93, bash, csh, tcsh.

L'eccezione è zsh, che è stranamente incompatibile. Questo è documentato nel manuale :

Se un elenco secondario termina con un &, &|o &!, la shell esegue l'ultimo pipeline in in background, e non aspetta che finisca (si noti la differenza con altre shell che eseguono l'intero sottolista in background).

Sfortunatamente, zsh si comporta in questo modo anche in modalità di compatibilità sh o ksh. Per assicurarsi che l'intero comando venga eseguito in background, metti tra parentesi graffe o parentesi. Le parentesi creano una subshell mentre le parentesi graffe no, ma questo è irrilevante (tranne che come micro-ottimizzazione in alcune shell) poiché un comando in background è comunque in una subshell.

{ cp a b && mv b c && rm a; } &

8
" Bash , esegui { ... ; } &un fork all'attuale livello di processo, mentre esegui ( ... ) &un fork da una subshell ... Il risultato è lo stesso, ma c'è comunque una leggera differenza.
F. Hauri,

14

puoi metterlo in parentesi come (cp a b && mv b c && rm a )&per includere l'intera catena.


2
E, soprattutto, questo chiarisce che l'intera catena è in background, anche per qualcuno che potrebbe non conoscere le regole di come gli operatori sono limitati
jackweirdy,

2
Guarda il mio commento alla risposta di @ Gilles, penso che { ... ; }sia una forma preferibile (via).
F. Hauri,
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.