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
答案 0 :(得分:1)
重定向仅在使用shell时才有效。 Runtime.exec()不使用shell。
答案 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中复制它,您必须获取命令的输出流并将其泵送到另一个进程的输入流