2013-04-26 61 views
16
Process p = Runtime.getRuntime().exec("sh somescript.sh &> out.txt"); 

我正在使用Java運行此命令。腳本正在運行,但不會將其流重定向到文件。此外,文件out.txt未被創建。運行時的exec()方法不重定向輸出

這個腳本運行良好,如果我在shell上運行它。

任何想法?

+0

爲什麼是&符號? – 2013-04-26 14:18:54

+0

它用於將輸出流和錯誤流重定向到文件 – user2110167 2013-04-26 14:19:37

+0

是否已在系統中搜索文件? – 2013-04-26 14:21:26

回答

30

您需要使用ProcessBuilder才能重定向。

ProcessBuilder builder = new ProcessBuilder("sh", "somescript.sh"); 
builder.redirectOutput(new File("out.txt")); 
builder.redirectError(new File("out.txt")); 
Process p = builder.start(); // may throw IOException 
+1

它工作絕對fine.Thanks ..有沒有任何參考,我可以閱讀更多關於這一點,我必須做很多東西在殼上使用java.So它將對我有用 – user2110167 2013-04-26 14:34:05

+1

@ user2110167 [關於ProcessBuilder的API文檔](http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html) – johnchen902 2013-04-26 14:37:22

+0

謝謝..祝你有美好的一天 – user2110167 2013-04-26 14:38:20

5

當您運行一個命令時,沒有shell正在運行,並且任何shell命令或函數都不可用。要使用類似&>的東西,您需要一個外殼。你有一個,但你沒有通過它。反而嘗試。

Runtime.getRuntime().exec(new String[] { "sh", "somescript.sh &> out.txt" }); 
+0

這不會編譯,是嗎? – 2013-04-26 14:28:53

+0

沒有重載的exec函數需要這樣的輸入,因爲它給出編譯錯誤 – user2110167 2013-04-26 14:30:21

+0

@commentators:'Runtime.getRuntime().exec(new String [] {「sh」,「somescript.sh&> out.txt」} );' – linuxeasy 2017-02-23 08:54:35