Execute combine multiple Linux commands in one line

后端 未结 9 2475
误落风尘
误落风尘 2020-12-04 04:32

I am trying to merge multiple linux commands in one line to perform deployment operation. For example

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


        
相关标签:
9条回答
  • 2020-12-04 05:10

    I've found that using ; to separate commands only works in the foreground. eg :

    cmd1; cmd2; cmd3 & - will only execute cmd3 in the background, whereas cmd1 && cmd2 && cmd3 & - will execute the entire chain in the background IF there are no errors.

    To cater for unconditional execution, using parenthesis solves this :

    (cmd1; cmd2; cmd3) & - will execute the chain of commands in the background, even if any step fails.

    0 讨论(0)
  • 2020-12-04 05:10

    If you want to execute all the commands, whether the previous one executes or not, you can use semicolon (;) to separate the commands.

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

    If you want to execute the next command only if the previous command succeeds, then you can use && to separate the commands.

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

    In your case, the execution of consecutive commands seems to depend upon the previous commands, so use the second example i.e. use && to join the commands.

    0 讨论(0)
  • 2020-12-04 05:17

    I find lots of answer for this kind of question misleading

    Modified from this post: https://www.webmasterworld.com/linux/3613813.htm

    The following code will create bash window and works exactly as a bash window. Hope this helps. Too many wrong/not-working answers out there...

                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();
                }
    
    0 讨论(0)
提交回复
热议问题