-2
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

4

3 回答 3

1

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

请参阅Java 执行 Linux 命令

于 2012-04-10T12:08:56.847 回答
1

重定向是由一个 shell 处理的,你在这里没有调用一个 shell,所以你不能使用重定向。另一方面,这样的事情会起作用:

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

请注意,我已将其更改为使用exec()字符串数组的形式,因为在命令行上正确标记带引号的字符串是只有 shell 才能做到的其他事情!

于 2012-04-10T12:09:49.833 回答
0

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

的第一个参数Runtime.getRuntime().exec()可执行文件,因此您的代码正试图执行一个字面上称为的命令echo \"bleh\" > test.txt,但它应该试图执行echo。可执行文件的参数在可执行文件之后传入,如下所示:

Runtime.getRuntime().exec("echo", new String[]{"bleh"});

重定向输出是另一回事,因为 *nix 操作符>是一个外壳程序。要在 java 中复制它,您必须获取命令的输出流并将其泵入另一个进程的输入流

于 2012-04-10T12:12:16.313 回答