2011-07-29 196 views
0

我想通過Java在Linux下運行nm命令。通過Java運行Linux命令。

我試過這段代碼:

command = "nm -l file1.o > file1.txt"; 
Process p = Runtime.getRuntime().exec(command); 

但它不工作,什麼是錯的代碼?

+2

你得到了什麼異常? –

回答

1

這裏就是你需要做的:

String command = "nm -l file1.o > file1.txt"; 
Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", command}); 

下面的 「簡單的答案」 將無法​​運作

String command = "/bin/sh -c 'nm -l file1.o > file1.txt'"; 
Process p = Runtime.getRuntime().exec(command); 

因爲exec(String)方法分割它的字符串天真地使用空白隔膜和忽略任何引用。所以上面的例子等同於提供下面的命令/參數列表。

new String[]{"/bin/sh", "-c", "'nm", "-l", "file1.o", ">", "file1.txt'"}; 
+0

感謝斯蒂芬現在的工作.. – Ashish

+0

我們如何才能得到這個命令的輸出?當我們使用sh打開新的shell時,我們如何捕獲命令的輸出? –

4

這不是可執行文件,它實際上是一個shell腳本。

如果你調用與-c殼,那麼你可以執行你的命令:

/bin/sh -c "command > here" 
+0

感謝您的回覆。但是這在ubuntu中不起作用。我不知道爲什麼我使用的是和你寫的一樣的代碼。 – Ashish

+0

是的...看到我的答案可能的解釋。 –

0

管道另一種方法是讀你的命令的標準輸出,看到Java exec() does not return expected result of pipes' connected commands爲例。

不是重定向使用輸出的「> file.txt的」,你會讀什麼輸出,並將其寫入到一個StringBuffer或爲OutputStream或任何你喜歡。

這樣做的好處是您還可以讀取stderr並查看是否有錯誤(如設備上沒有剩餘空間等)。 (你也可以做,使用「2>」用你的方法)