Ich versuche, mehrere Linux-Befehle in einer Zeile zusammenzufassen, um einen Bereitstellungsvorgang durchzuführen. Zum Beispiel
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Ich versuche, mehrere Linux-Befehle in einer Zeile zusammenzufassen, um einen Bereitstellungsvorgang durchzuführen. Zum Beispiel
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Wenn Sie jeden Befehl nur dann ausführen wollen, wenn der vorherige erfolgreich war, dann kombinieren Sie sie mit der Option &&
Betreiber:
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
Wenn einer der Befehle fehlschlägt, werden alle anderen Befehle, die ihm folgen, nicht ausgeführt.
Wenn Sie alle Befehle ausführen wollen, unabhängig davon, ob die vorherigen Befehle fehlgeschlagen sind oder nicht, trennen Sie sie durch Semikolon:
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
In Ihrem Fall, denke ich, wollen Sie 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 einem Skript zusammenfassen 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 die nächste Zeile für einen neuen Befehl hält; würden Sie die Backslashes weglassen, müssten Sie den gesamten Befehl in eine einzige Zeile schreiben.
Ein bequemerer Weg im Vergleich zur Verwendung von Backslashes und &&
soll die Shell anweisen, das Skript zu beenden, wenn einer der Befehle fehlschlägt. Sie tun dies mit der set
integrierte Funktion mit der -e
Argument. Damit können Sie ein Skript auf eine viel natürlichere Weise 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 es ausführbar:
chmod +x myscript
Sie können das Skript nun wie andere Programme auf dem Rechner ausführen. Wenn Sie es jedoch nicht in einem Verzeichnis ablegen, das in Ihrem PATH
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 mit aus:
./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. Um alle Befehle bedingungslos auszuführen, rufen Sie einfach nicht set -e
:
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Ich habe festgestellt, dass die Verwendung von ; zur Trennung von Befehlen nur im Vordergrund funktioniert. z.B. :
cmd1; cmd2; cmd3 &
- wird nur ausgeführt cmd3
im Hintergrund, während cmd1 && cmd2 && cmd3 &
- wird die gesamte Kette im Hintergrund ausgeführt, WENN keine Fehler auftreten.
Um eine unbedingte Ausführung zu ermöglichen, wird dieses Problem durch die Verwendung von Klammern gelöst:
(cmd1; cmd2; cmd3) &
- führt die Befehlskette im Hintergrund aus, auch wenn ein Schritt fehlschlägt.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.