Bash – wie führe ich einen Befehl aus, nachdem der vorherige beendet wurde? [duplizieren]

Diese Frage hat hier bereits Antworten :

Kommentare

  • terdon ' Antwort unten ist ausgezeichnet, aber Sie können die Semikolons in der oben gezeigten Version ' ablegen und die Befehle werden in der Reihenfolge im Skript ausgeführt, jeweils in einer eigenen Zeile. Das Semikolon ist redundant, es sei denn, Sie setzen alle Befehle in eine Zeile.

Antwort

Ja, Sie sind Machen Sie es richtig. Shell-Skripte führen jeden Befehl nacheinander aus und warten, bis der erste beendet ist, bevor der nächste beginnt. Sie können Befehle entweder mit ; verknüpfen oder in separaten Zeilen haben :

command1; command2 

oder

command1 command2 

, wenn sich die Befehle in separaten Zeilen befinden. Sie können den zweiten Befehl auch nur ausführen, wenn der erste erfolgreich beendet wurde. Fügen Sie dazu && hinzu :

command1 && command2 

oder

command1 && command2 

Weitere Informationen zu den verschiedenen Steuerungsoperatoren, die für verfügbar sind Sie sehen hier .

Kommentare

  • Erinnern Sie sich daran, dass anstelle von &&, OP könnte einfach set -e am Anfang des Skripts. Dies ist natürlich kein Prozessverkettungsoperator.
  • @didierc, der dazu führt, dass das Skript bei einem Fehler beendet wird, und außerdem eine Menge unnötiger Fortschrittsberichte erstellt. Nicht dasselbe wie das Verknüpfen zweier spezifischer Befehle mit &&.
  • @polemon nicht wirklich, nein. Dies ist eine sehr einfache Frage eines unerfahrenen Benutzers. Ich sehe ' nicht viel Sinn darin, zu viele Details hinzuzufügen. Beachten Sie, dass ich ' nicht einmal || erwähnt habe. Ich verstehe ' nicht wirklich, warum wait hier relevant ist, es wird sicherlich nicht für die einfache Aufgabe benötigt, einen Befehl nach dem anderen auszuführen. Es wäre nur für eine feinkörnigere Steuerung von Prozessen erforderlich. Sie können natürlich gerne eine Antwort einreichen, aber ich ' möchte meine lieber einfach halten.
  • @terdon würde nicht ' Ist das nicht set -v oder set -x anstatt set -e?
  • @didierc siehe meinen Kommentar oben, ich dachte an set -x, sorry.

Antwort

In einem sich wiederholenden Fall wie diesem habe ich die Verwendung einer for-Schleife empfohlen.

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

Dies ist eine einzeilige Version, die für die Befehlszeile geeignet ist, aber auch in einem Skript verwendet werden kann. Die geschweiften Klammern um den Variablennamen werden benötigt, wenn eine Variable in eine Zeichenfolge ohne Leerzeichen eingebettet wird.

Die Schleife sendet die Anforderungen nicht nur in der richtigen Reihenfolge, sondern kann bei Bedarf auch einfacher angepasst und wiederverwendet werden, ohne dass Sie sich darum kümmern müssen Tippfehler.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.