2012-04-10 132 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