Questo articolo spiega come eseguire un comando al termine dell’esecuzione del comando precedente. Usando questo, puoi eseguire non solo 2 comandi, ma qualsiasi numero di comandi, dopo che il precedente è terminato. Funzionerà con Sh, Bash, Zsh e altre shell.
È possibile eseguire un comando dopo che il precedente è terminato, a seconda dello stato di uscita del comando precedente (se non è riuscito o meno) o indipendentemente da ciò. Quindi ci sono 3 possibili situazioni:
- eseguire un comando se il comando precedente è terminato correttamente,
- eseguire un comando se il comando precedente non è riuscito (se ha uno stato di uscita diverso da 0), oppure
- eseguire un comando indipendentemente dallo stato di uscita del comando precedente (non importa se è fallito o meno)
Diamo un’occhiata a ciascuno di questi casi di seguito.
Potrebbe interessarti anche: Come ripetere un comando ogni X secondi su Linux
Per eseguire più comandi in successione (attendere che il precedente finisca) solo se il comando precedente è uscito con successo, utilizzare il tasto &&
operatore tra i comandi. Ad esempio (puoi avere un numero qualsiasi di comandi):
command1 && command2
Se non ti interessa lo stato di uscita del comando precedente e vuoi solo eseguire un comando dopo che il precedente è terminato, usa il ;
separatore. Esempio (puoi avere un numero qualsiasi di comandi):
command1; command2; command3
Cosa succede se si desidera eseguire un comando dopo che il precedente ha terminato l’esecuzione, ma solo se questo comando precedente non è riuscito (se restituisce uno stato di uscita diverso da 0). In tal caso, utilizzare il ||
separatore. Ad esempio (ancora una volta, puoi avere un numero qualsiasi di comandi):
command1 || command2
Potrebbe interessarti anche: Come trovare i file modificati negli ultimi N giorni o minuti usando find
Puoi anche mischiare questi operatori. In tal caso, puoi raggruppare i comandi usando {
e }
. Perché funzioni, devi assicurarti di aggiungere un punto e virgola (;
) prima }
e uno spazio dopo {
. Per esempio:
command1 || { command2; command3; }
In questo esempio:
- correre
command1
e aspetta che finisca - Se
command1
fallisce, passa ai comandi successivi (||
):- correre
command2
e aspetta che finisca - indipendentemente da
command2
lo stato di uscita di, esegui command3 (;
)
- correre
Un altro esempio:
{ command1 && command2; }; { command3 && command4; }
In questo esempio:
- correre
command1
e aspetta che finisca - Se
command1
ha esito positivo, esegui command2 e attendi che finisca (&&
) - a prescindere se
command2
ha avuto successo o no, o se ha funzionato o no, corricommand3
e aspetta che finisca (il;
dopo il primo}
) - Se
command3
ha successo, corricommand4
(&&
)
Come promemoria, il ;
prima di ciascuno }
è richiesto quando si utilizza {}
e non influisce sul modo in cui vengono eseguiti i comandi.
[[Edit]] L’articolo inizialmente utilizzava le parentesi (()
) per mischiare gli operatori; ma questo ha alcuni svantaggi (come l’esecuzione dei comandi in una subshell) rispetto all’uso delle parentesi graffe ({}
), come sottolineato da Laurent in un commento qui sotto. Quindi ho aggiornato l’articolo da usare {}
per questo.
Potrebbe interessarti: Come cambiare la shell predefinita in Linux