如何从 Java 代码运行 Unix shell 脚本?
从Java运行Unix命令非常简单。
Runtime.getRuntime().exec(myCommand);
但是有可能从Java代码运行Unix shell脚本吗?如果是,从 Java 代码中运行 shell 脚本是否是一种很好的做法?
从Java运行Unix命令非常简单。
Runtime.getRuntime().exec(myCommand);
但是有可能从Java代码运行Unix shell脚本吗?如果是,从 Java 代码中运行 shell 脚本是否是一种很好的做法?
您应该真正查看 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();
您也可以使用Apache Commons exec库。
例:
package testShellScript;
import java.io.IOException;
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteException;
public class TestScript {
int iExitValue;
String sCommandString;
public void runScript(String command){
sCommandString = command;
CommandLine oCmdLine = CommandLine.parse(sCommandString);
DefaultExecutor oDefaultExecutor = new DefaultExecutor();
oDefaultExecutor.setExitValue(0);
try {
iExitValue = oDefaultExecutor.execute(oCmdLine);
} catch (ExecuteException e) {
System.err.println("Execution failed.");
e.printStackTrace();
} catch (IOException e) {
System.err.println("permission denied.");
e.printStackTrace();
}
}
public static void main(String args[]){
TestScript testScript = new TestScript();
testScript.runScript("sh /root/Desktop/testScript.sh");
}
}
为了进一步参考,Apache Doc上也给出了一个例子。