2012-04-10 92 views
-2
Process log_remover = Runtime.getRuntime().exec("echo \"bleh\" > test.txt"); 
log_remover.waitFor(); 
log_remover.destroy(); 

这无助执行UNIX使用运行时类从Java命令

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

但这个工程:S

+1

问题是什么? – 2012-04-10 12:07:56

+0

哈哈,是吗? – 2012-04-10 12:11:55

回答

1

重定向由壳处理,你不在这里调用外壳,所以你不能使用重定向。这样的事情,在另一方面,将工作:

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

注意我已经改变了这个使用的exec()的形式需要一个字符串数组,如适当令牌化的命令行中引用的字符串是别的东西只有壳可以做!

+0

nope没有工作 – 2012-04-10 12:15:37

+0

你有没有把-c @ Ernest Friedman-Hill?如果它对于使用korn shell的shell im – 2012-04-10 12:19:38

+0

进程log_remover = Runtime.getRuntime()。exec(“log_remover.sh”);为什么没有这个工作 – 2012-04-10 12:51:57

0

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

的第一个参数Runtime.getRuntime().exec()可执行,所以你的代码试图执行一个叫做字面上命令echo \"bleh\" > test.txt,但应努力执行echo。参数传递给可执行文件的可执行文件后,通过了,像这样的:

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

重定向输出是另一回事,因为* nix的操作>是一个shell的事情。要在java中复制它,你必须得到命令的输出流并将其泵送到另一个进程的输入流

+0

find ./HLR3/LOGS -name'* .txt'-exec rm {} \;我怎样才能执行这个@Bohemian – 2012-04-10 12:29:59

+0

进程log_remover = Runtime.getRuntime().exec(“log_remover.sh”);这不起作用 – 2012-04-10 12:49:35

+0

使用绝对路径,例如'Runtime.getRuntime()。exec(“/ usr/bin/log_remover.sh”)'或者其他任何东西。 java exec环境与你的shell不一样。 – Bohemian 2012-04-10 15:42:19