Sie können Ihre Befehle mit einem Semikolon trennen:
cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install
Meinten Sie das?
Wenn Sie jeden Befehl nur ausführen möchten, wenn der vorherige erfolgreich war, kombinieren Sie sie mit &&
Betreiber:
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
Wenn einer der Befehle fehlschlägt, werden alle anderen folgenden Befehle nicht ausgeführt.
Wenn Sie alle Befehle unabhängig davon ausführen möchten, ob die vorherigen fehlgeschlagen sind oder nicht, trennen Sie sie mit Semikolons:
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
In Ihrem Fall möchten Sie meiner Meinung nach den ersten Fall, in dem die Ausführung des nächsten Befehls vom Erfolg des vorherigen abhängt.
Sie können auch alle Befehle in ein Skript packen und dieses stattdessen ausführen:
#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install
Die Backslashes am Ende der Zeile sollen verhindern, dass die Shell denkt, dass die nächste Zeile ein neuer Befehl ist; Wenn Sie die umgekehrten Schrägstriche weglassen, müssten Sie den gesamten Befehl in einer einzigen Zeile schreiben.
Eine bequemere Methode im Vergleich zur Verwendung von Backslashes und &&
Überall wird die Shell angewiesen, das Skript zu beenden, wenn einer der Befehle fehlschlägt. Das machst du mit dem set
eingebaute Funktion mit dem -e
Streit. Damit können Sie ein Skript viel natürlicher schreiben:
#! /bin/sh
set -e
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Speichern Sie das in einer Datei, zum Beispiel myscript
, und machen Sie es ausführbar:
chmod +x myscript
Sie können dieses Skript jetzt wie andere Programme auf dem Computer ausführen. Aber wenn Sie es nicht in einem Verzeichnis platzieren, das in Ihrem PATH
aufgeführt ist Umgebungsvariable (zum Beispiel /usr/local/bin
, oder bei einigen Linux-Distributionen ~/bin
), dann müssen Sie den Pfad zu diesem Skript angeben. Wenn es sich im aktuellen Verzeichnis befindet, führen Sie es aus mit:
./myscript
Die Befehle im Skript funktionieren genauso wie die Befehle im ersten Beispiel; der nächste Befehl wird nur ausgeführt, wenn der vorherige erfolgreich war. Rufen Sie zur bedingungslosen Ausführung aller Befehle einfach set -e
nicht auf :
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Ich habe das mit; Befehle zu trennen funktioniert nur im Vordergrund. zB :
cmd1; cmd2; cmd3 &
- führt nur cmd3
aus im Hintergrund, während cmd1 && cmd2 && cmd3 &
- führt die gesamte Kette im Hintergrund aus, wenn keine Fehler vorliegen.
Um eine bedingungslose Ausführung zu ermöglichen, löst die Verwendung von Klammern Folgendes:
(cmd1; cmd2; cmd3) &
- Führt die Befehlskette im Hintergrund aus, auch wenn irgendein Schritt fehlschlägt.
Um sie alle auf einmal auszuführen, können Sie die Pipeline-Taste "|" verwenden. etwa so:
$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install