使用运行时类从java执行unix命令

时间:2012-04-10 12:05:52

标签: java unix runtime.exec

Process log_remover = Runtime.getRuntime().exec("echo \"bleh\" > test.txt");
log_remover.waitFor();
log_remover.destroy();

这没什么作用

Process node_creation = Runtime.getRuntime().exec("cp -r ../HLR"+String.valueOf(count-1)+" ../HLR"+String.valueOf(count));
node_creation.waitFor();
node_creation.destroy();

然而这有效:S

3 个答案:

答案 0 :(得分:1)

重定向仅在使用shell时才有效。 Runtime.exec()不使用shell。

请参阅Java Executing Linux Command

答案 1 :(得分:1)

重定向由shell处理,并且您不在此处调用shell,因此您无法使用重定向。另一方面,像这样的东西会起作用:

Runtime.getRuntime().exec(new String[] {"sh",  "-c", "echo 'bleh' > text.txt"});

注意我已将此更改为使用带有字符串数组的exec()形式,因为在命令行上正确标记引用的字符串是只有shell才能执行的操作!

答案 2 :(得分:0)

我之前见过很多次的经典错误......

Runtime.getRuntime().exec()的第一个参数是可执行文件,因此您的代码正在尝试执行一个名为echo \"bleh\" > test.txt的命令,但它应该尝试执行{{1 }}。可执行文件的参数在可执行文件之后传递,如下所示:

echo

重定向输出是另一个故事,因为* nix运算符Runtime.getRuntime().exec("echo", new String[]{"bleh"}); 是shell的东西。要在java中复制它,您必须获取命令的输出流并将其泵送到另一个进程的输入流