我想通過Java在Linux下運行nm命令。通過Java運行Linux命令。
我試過這段代碼:
command = "nm -l file1.o > file1.txt";
Process p = Runtime.getRuntime().exec(command);
但它不工作,什麼是錯的代碼?
我想通過Java在Linux下運行nm命令。通過Java運行Linux命令。
我試過這段代碼:
command = "nm -l file1.o > file1.txt";
Process p = Runtime.getRuntime().exec(command);
但它不工作,什麼是錯的代碼?
這裏就是你需要做的:
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'"};
感謝斯蒂芬現在的工作.. – Ashish
我們如何才能得到這個命令的輸出?當我們使用sh打開新的shell時,我們如何捕獲命令的輸出? –
這不是可執行文件,它實際上是一個shell腳本。
如果你調用與-c殼,那麼你可以執行你的命令:
/bin/sh -c "command > here"
感謝您的回覆。但是這在ubuntu中不起作用。我不知道爲什麼我使用的是和你寫的一樣的代碼。 – Ashish
是的...看到我的答案可能的解釋。 –
管道另一種方法是讀你的命令的標準輸出,看到Java exec() does not return expected result of pipes' connected commands爲例。
不是重定向使用輸出的「> file.txt的」,你會讀什麼輸出,並將其寫入到一個StringBuffer或爲OutputStream或任何你喜歡。
這樣做的好處是您還可以讀取stderr並查看是否有錯誤(如設備上沒有剩餘空間等)。 (你也可以做,使用「2>」用你的方法)
你得到了什麼異常? –