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 alle Befehle ausführen wollen, unabhängig davon, ob der vorherige Befehl ausgeführt wurde oder nicht, können Sie die Befehle mit einem Semikolon (;) trennen.
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
Wenn Sie den nächsten Befehl nur dann ausführen wollen, wenn der vorherige Befehl erfolgreich war, können Sie && verwenden, um die Befehle zu 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 vorhergehenden Befehlen abzuhängen, verwenden Sie also das zweite Beispiel, d. h. verwenden Sie &&, um die Befehle zu verbinden.
Welchen Nutzen hat ein einzelnes Ampersand? Heute Morgen habe ich einen Launcher im XFCE-Panel (in Manjaro+XFCE) erstellt, um 2 Passwort-Manager gleichzeitig zu starten:
sh -c "keepassx && password-gorilla"
or
sh -c "keepassx; password-gorilla"
Aber es funktioniert nicht so, wie ich es möchte. D.h., die erste App startet, aber die zweite startet nur, wenn die vorherige geschlossen wird
Ich habe jedoch festgestellt, dass (mit nur einem Ampersand):
sh -c "keepassx & password-gorilla"
und es funktioniert jetzt so, wie ich es will...
;
$ cd myfolder; ls # no matter cd to myfolder successfully, run ls
&&
Erst wenn der erste Befehl cmd1 erfolgreich ausgeführt wurde, führen Sie den zweiten Befehl cmd2 aus:
$ cd myfolder && ls # run ls only after cd to myfolder
||
Erst wenn der erste Befehl cmd1 nicht ausgeführt werden konnte, führen Sie den zweiten Befehl cmd2 aus:
$ cd myfolder || ls # if failed cd to myfolder, `ls` will run
Ich finde viele Antworten auf diese Art von Fragen irreführend
Geändert von diesem Beitrag: https://www.webmasterworld.com/linux/3613813.htm
Der folgende Code erzeugt ein Bash-Fenster und funktioniert genau wie ein Bash-Fenster. Hoffentlich hilft das. Zu viele falsche/nicht funktionierende Antworten da draußen...
Process proc;
try {
//create a bash window
proc = Runtime.getRuntime().exec("/bin/bash");
if (proc != null) {
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
BufferedReader err = new BufferedReader(new InputStreamReader(
proc.getErrorStream()));
//input into the bash window
out.println("cd /my_folder");
out.println("rm *.jar");
out.println("svn co path to repo");
out.println("mvn compile package install");
out.println("exit");
String line;
System.out.println("----printing output-----");
while ((line = in.readLine()) != null) {
System.out.println(line);
}
while((line = err.readLine()) != null) {
//read errors
}
proc.waitFor();
in.close();
out.close();
err.close();
proc.destroy();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
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.