我试图合并多个linux命令在一行执行部署操作。 例如

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

当前回答

我发现使用;分离命令只在前台工作。例如:

cmd1;cmd2;Cmd3 & -将只在后台执行Cmd3,而 如果没有错误,cmd1 && cmd2 && cmd3 & -将在后台执行整个链。

为了满足无条件执行,使用括号解决了这个问题:

(cmd1;cmd2;Cmd3) & -将在后台执行命令链,即使任何步骤失败。

其他回答

我发现使用;分离命令只在前台工作。例如:

cmd1;cmd2;Cmd3 & -将只在后台执行Cmd3,而 如果没有错误,cmd1 && cmd2 && cmd3 & -将在后台执行整个链。

为了满足无条件执行,使用括号解决了这个问题:

(cmd1;cmd2;Cmd3) & -将在后台执行命令链,即使任何步骤失败。

如果需要同时执行所有命令,可以用“;”分隔,不管上一条命令是否执行。

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

如果希望在上一条命令执行成功后才执行下一条命令,可以使用&&分隔。

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

在你的例子中,连续命令的执行似乎依赖于前面的命令,所以使用第二个例子,即使用&&来连接命令。

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

要一次性运行它们,你可以使用管道键“|”,如下所示:

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

我发现这类问题的很多答案都具有误导性

修改自此文: https://www.webmasterworld.com/linux/3613813.htm

下面的代码将创建bash窗口,并与bash窗口完全相同。希望这能有所帮助。有太多错误的答案了……

            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();
            }