我试图合并多个linux命令在一行执行部署操作。 例如
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
我试图合并多个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();
}