Bash – hvordan man kører en kommando, når den forrige er færdig? [duplikat]

Dette spørgsmål har allerede svar her :

Kommentarer

  • terdon ' s svar nedenfor er fremragende, men du kan slippe semikolonerne i den version, du ' har vist ovenfor, såvel som kommandoer udføres i rækkefølge i scriptet, hver på sin egen linje. Semikolonet er overflødigt, medmindre du sætter alle kommandoerne på en linje.

Svar

Ja, du er gør det på den rigtige måde. Shell-scripts kører hver kommando sekventielt og venter på, at den første slutter, inden den næste starter. Du kan enten slutte kommandoer med ; eller have dem på separate linjer :

command1; command2 

eller

command1 command2 

Der er ikke behov for ; hvis kommandoerne er på separate linjer. Du kan også vælge kun at køre den anden kommando, hvis den første afsluttes med succes. For at gøre det skal du slutte dem til && :

command1 && command2 

eller

command1 && command2 

For mere information om de forskellige kontroloperatører, der er tilgængelige for dig, se her .

Kommentarer

  • Husk det i stedet for &&, OP kunne simpelthen tilføje set -e i begyndelsen af scriptet. Dette er selvfølgelig ikke en proceskædningsoperatør.
  • @dierierc, der får scriptet til at afslutte enhver fejl og vil også producere masser af unødvendige statusrapporter. Ikke det samme som at forbinde to specifikke kommandoer med &&.
  • @polemon ikke rigtig, nej. Dette er et meget simpelt spørgsmål fra en nybegynderbruger. Jeg ' ser ikke meget mening i at tilføje for mange detaljer. Bemærk, at jeg ikke ' ikke engang nævnte ||. Jeg kan ikke ' virkelig se, hvorfor wait er relevant her, det er bestemt ikke nødvendigt for den enkle opgave at køre den ene kommando efter den anden. Det ville kun være nødvendigt for mere finkornet kontrol af processer. Du er selvfølgelig velkommen til at indsende et svar, men jeg ' vil hellere holde mig enkel.
  • @terdon ville ikke ' t der er set -v eller set -x snarere end set -e?
  • @didierc se min kommentar ovenfor, jeg tænkte på set -x, undskyld.

Svar

I en gentagen sag som denne anbefalede jeg at bruge en for loop .

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

Dette er en version med en linje, der passer til kommandolinjen, men kan også bruges i et script. Bøjlerne omkring variabelnavnet er nødvendige, når en variabel indlejres i en streng uden hvidt mellemrum.

Sløjfen sender ikke kun anmodningerne i rækkefølge, men er lettere at tilpasse og genbruge, når det er nødvendigt, uden så mange bekymringer om skrivefejl.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *