it-swarm.com.de

Führen Sie mehrere Linux-Befehle in einer Zeile aus

Ich versuche, mehrere Linux-Befehle in einer Zeile zusammenzuführen, um den Bereitstellungsvorgang auszuführen. Zum Beispiel

cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
308
d-man

Wenn Sie jeden Befehl nur ausführen möchten, wenn der vorherige erfolgreich war, kombinieren Sie sie mit dem Operator &&:

cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install

Wenn einer der Befehle fehlschlägt, werden alle anderen darauf folgenden Befehle nicht ausgeführt.

Wenn Sie alle Befehle ausführen möchten, unabhängig davon, ob die vorherigen fehlgeschlagen sind oder nicht, trennen Sie sie durch Semikolons:

cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install

In Ihrem Fall möchten Sie wahrscheinlich den ersten Fall, in dem die Ausführung des nächsten Befehls vom Erfolg des vorherigen Befehls abhängt.

Sie können auch alle Befehle in ein Skript einfügen und stattdessen Folgendes ausführen:

#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install

(Die umgekehrten Schrägstriche am Ende der Zeile verhindern, dass die Shell denkt, dass die nächste Zeile ein neuer Befehl ist. Wenn Sie die umgekehrten Schrägstriche weglassen, müssen Sie den gesamten Befehl in eine einzige Zeile schreiben.)

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. Wenn Sie es jedoch nicht in einem Verzeichnis ablegen, das in Ihrer Umgebungsvariablen PATH aufgeführt ist (z. B. /usr/local/bin oder auf einigen Linux-Distributionen ~/bin), müssen Sie den Pfad angeben zu diesem Skript. 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. Um alle Befehle bedingungslos auszuführen, listen Sie einfach jeden Befehl in einer eigenen Zeile auf:

#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
686
Nikos C.

Ich habe das mit gefunden; Befehle zu trennen funktioniert nur im Vordergrund. z.B :

cmd1; cmd2; cmd3 & - führt nur cmd3 im Hintergrund aus, während cmd1 && cmd2 && cmd3 & - die gesamte Kette im Hintergrund ausführt, wenn keine Fehler vorliegen.

Um eine bedingungslose Ausführung zu gewährleisten, wird Folgendes durch die Verwendung von Klammern gelöst:

(cmd1; cmd2; cmd3) & - führt die Befehlskette im Hintergrund aus, auch wenn ein Schritt fehlschlägt.

43
Dean

Sie können Ihre Befehle durch ein Semikolon trennen:

cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install

War es das was du meinst?

10
andrux

Um sie alle auf einmal auszuführen, können Sie die Pipe-Line-Taste "|" wie so:

$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install
2
Kelly Poore

Wenn Sie alle Befehle ausführen möchten, unabhängig davon, ob der vorherige ausgeführt wird oder nicht, können Sie die Befehle durch Semikolon (;) trennen.

cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install

Wenn Sie den nächsten Befehl nur ausführen möchten, wenn der vorherige Befehl erfolgreich ist, können Sie die Befehle mit && trennen.

cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install

In Ihrem Fall scheint die Ausführung aufeinanderfolgender Befehle von den vorherigen Befehlen abzuhängen, verwenden Sie also das zweite Beispiel, d. H. Verwenden Sie &&, um die Befehle zusammenzufügen.

2
Prabhu
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
1
Mark Stevens

Was bringt ein einziges kaufmännisches Und? Heute Morgen habe ich im XFCE-Bedienfeld (in Manjaro + XFCE) einen Starter erstellt, um zwei Kennwort-Manager gleichzeitig zu starten:

sh -c "keepassx && password-gorilla"
or
sh -c "keepassx; password-gorilla"

Aber es funktioniert nicht so wie ich es will. Dh, die erste App startet, aber die zweite startet nur, wenn die vorherige geschlossen ist: - /

Ich fand jedoch, dass (mit nur einem kaufmännischen Und):

sh -c "keepassx & password-gorilla"

und es funktioniert so wie ich es jetzt will ...

0
Nettlebay AP