如何从Java代码运行Unix shell脚本?

问题

从Java运行Unix命令非常简单。

Runtime.getRuntime().exec(myCommand);

但是可以从Java代码运行Unix shell脚本吗?如果是,从Java代码中运行shell脚本是一个好习惯吗?


#1 热门回答(162 赞)

你应该看看Process Builder。它真的是为这种东西而建的。

ProcessBuilder pb = new ProcessBuilder("myshellScript.sh", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory(new File("myDir"));
 Process p = pb.start();

#2 热门回答(23 赞)

我会说,Javato的精神并不是从Java运行shell脚本。 Java意味着是跨平台的,运行shell脚本会将其用途仅限于UNIX。

话虽如此,绝对可以从Java中运行shell脚本。你使用的是与你列出的完全相同的语法(我自己没有尝试过,但是尝试直接执行shell脚本,如果不起作用,请执行shell本身,将脚本作为命令行参数传递) 。


#3 热门回答(21 赞)

我想你已回答了自己的问题

Runtime.getRuntime().exec(myShellScript);

至于它是否是一个好习惯...你想用一些你不能用Java做的shell脚本做什么?