Bash – hur man kör ett kommando efter att det föregående är klart? [duplicera]

<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Denna fråga har redan svar här :

Kommentarer

  • terdon ' s svar nedan är utmärkt men du kan släppa semikolonerna i den version du ' har visat ovan samt kommandon utförs i ordning i skriptet, var och en på sin egen rad. Semikolonet är överflödigt om du inte lägger alla kommandon på en rad.

Svar

Ja, du är gör det på rätt sätt. Shell-skript kör varje kommando i följd och väntar på att det första ska slutföras innan nästa startar. Du kan antingen gå med i kommandon med ; eller ha dem på separata rader :

command1; command2 

eller

command1 command2 

Det finns inget behov av ; om kommandona är på separata rader. Du kan också välja att köra det andra kommandot endast om det första avslutades framgångsrikt. För att göra det, gå med dem med && :

command1 && command2 

eller

command1 && command2 

För mer information om de olika kontrolloperatörer som finns tillgängliga för du, se här .

Kommentarer

  • Kom ihåg det istället för &&, OP kunde helt enkelt lägga till set -e i början av skriptet. Naturligtvis är detta inte en processkedjande operatör.
  • @didierc som får skriptet att avslutas vid eventuella fel och kommer också att producera massor av onödiga framstegsrapporter. Inte samma som att länka två specifika kommandon till &&.
  • @polemon egentligen inte, nej. Det här är en mycket enkel fråga från en nybörjare. Jag ser inte ' mycket för att lägga till för mycket detaljer. Observera att jag inte ' inte ens nämnde ||. Jag förstår inte ' varför wait är relevant här, det behövs verkligen inte för den enkla uppgiften att köra det ena kommandot efter det andra. Det skulle bara behövas för mer finkornig kontroll av processer. Skicka självklart ett svar, men jag ' vill hellre hålla mig enkel.
  • @terdon skulle inte ' t som är set -v eller set -x snarare än set -e?
  • @didierc se min kommentar ovan, jag tänkte på set -x, förlåt.

Svar

I ett repetitivt fall som detta rekommenderade jag att använda en for loop .

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

Detta är en enradig version som är lämplig för kommandoraden men kan också användas i ett skript. Hängslen runt variabelnamnet behövs när man bäddar in en variabel i en sträng utan tomt utrymme.

Slingan skickar inte bara förfrågningarna i ordning utan är lättare att justera och återanvända vid behov utan lika många bekymmer om skrivfel.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *