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

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

你是这个意思吗?

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

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

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

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

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

修改自此文: 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();
            }
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install

通知你, 如果在If -else中需要在一行中同时执行多条命令,可以使用圆括号将命令组合在一起。详情请参阅本页。

您可以根据需要将分号(;)替换为&&或||。请注意,括号创建了一个子shell来执行命令。

如果存在一个名为file_name的文件,以下命令将执行cmd1、cmd2和cmd3命令;否则为cmd4、cmd5、cmd6。

[ -f file_name ] && (cmd1; cmd2; cmd3) || (cmd4; cmd5; cmd6)