Bash: come eseguire un comando dopo il precedente finito? [duplicate]

Questa domanda ha già una risposta qui :

Commenti

  • terdon ' s risposta di seguito è eccellente ma puoi eliminare i punti e virgola nella versione ' mostrata sopra così come i comandi vengono eseguiti in ordine nello script, ciascuno sulla propria riga. Il punto e virgola è ridondante a meno che tu non metta tutti i comandi su una riga.

Risposta

Sì, sei farlo nel modo giusto. Gli script della shell eseguiranno ogni comando in sequenza, aspettando che il primo finisca prima che inizi il successivo. Puoi unire i comandi con ; o averli su righe separate :

command1; command2 

o

command1 command2 

Non è necessario ; se i comandi sono su righe separate. Puoi anche scegliere di eseguire il secondo comando solo se il primo è uscito correttamente. Per farlo, uniscili con && :

command1 && command2 

o

command1 && command2 

Per ulteriori informazioni sui vari operatori di controllo disponibili per vedi qui .

Commenti

  • Ricorda che invece di &&, OP potrebbe semplicemente aggiungere set -e allinizio dello script. Ovviamente, questo non è un operatore di concatenamento dei processi.
  • @didierc che farà terminare lo script in caso di errore e produrrà anche un sacco di rapporti sui progressi inutili. Non è la stessa cosa che collegare due comandi specifici con &&.
  • @polemon non proprio, no. Questa è una domanda molto semplice da parte di un utente inesperto. Non ' non vedo molto utile aggiungere troppi dettagli. Tieni presente che ' non ho nemmeno menzionato ||. Non ' non vedo davvero perché wait sia rilevante qui, non è certamente necessario per il semplice compito di eseguire un comando dopo laltro. Sarebbe necessario solo per un controllo più dettagliato dei processi. Sentiti libero di inviare una risposta, naturalmente, ma ' preferisco mantenere la mia semplice.
  • @terdon non ' che sia set -v o set -x anziché set -e?
  • @didierc vedi il mio commento sopra, stavo pensando a set -x, scusa.

Risposta

In un caso ripetitivo come questo ho consigliato di utilizzare un ciclo for .

 for P in {1..3} ; do wget -q http://exemple.com/page${P}.php ; done  

Questa è una versione di una riga adatta per la riga di comando ma può essere utilizzata anche in uno script. Le parentesi graffe intorno al nome della variabile sono necessarie quando si incorpora una variabile in una stringa senza spazi.

Il ciclo non solo invia le richieste in ordine, ma è più facile da modificare e riutilizzare quando necessario, senza tante preoccupazioni errori di battitura.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *