356 Stimmen

Ausführen mehrerer Linux-Befehle in einer Zeile kombinieren

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

1voto

Prabhu Punkte 4983

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.

1voto

Nettlebay AP Punkte 51

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...

0voto

anirudh Punkte 111
  1. Utilice ;
  • Unabhängig davon, ob der erste Befehl cmd1 erfolgreich ausgeführt wurde oder nicht, führen Sie immer den zweiten Befehl cmd2 aus:
    • $ cd myfolder; ls # no matter cd to myfolder successfully, run ls
  1. Utilice &&
  • 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
  1. Utilice ||
  • 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

-1voto

Deniz Güzel Punkte 35

Sie können den folgenden Code verwenden;

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

Es funktioniert...

-1voto

wwjih123 Punkte 1056

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.com

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.

Powered by:

X