2013-03-15 63 views
3

我需要從我的Java代碼運行一個.sh文件,而不需要傳遞任何參數。我已經嘗試過用如何從Java運行.sh文件?

Runtime.getRuntime().exec("src/lexparser.sh"); 

ProcessBuilder pb = new ProcessBuilder("src/lexparser.sh"); 
Process p = pb.start(); 

上述兩種方法沒有工作做。是否有任何其他方法來運行.sh文件形式的Java?

+3

你是什麼意思_didn't work_? – Apurv 2013-03-15 09:10:16

+0

確保你的.sh是可執行的 – 2013-03-15 09:10:42

+0

你得到了什麼錯誤? – AmitG 2013-03-15 09:10:46

回答

8
ProcessBuilder pb = new ProcessBuilder("src/lexparser.sh", "myArg1", "myArg2"); 
Process p = pb.start(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line = null; 
while ((line = reader.readLine()) != null) 
{ 
    System.out.println(line); 
} 
+0

你在哪裏使用'過程p;'? – AmitG 2013-03-15 09:12:27

+0

開始processbuilder – Biswajit 2013-03-15 09:14:08

+0

我的意思是你在以後的代碼中使用'p'引用變量在哪裏? – AmitG 2013-03-15 09:16:03

3

有兩件事情,很容易錯過:

  1. 路徑和CWD。確保找到可執行文件的最簡單方法是提供絕對路徑,例如/usr/local/bin/lexparser.sh

  2. 過程輸出。您需要閱讀過程輸出。輸出緩衝,如果輸出緩衝區滿了,產生的進程將掛起。

+0

我將.sh文件保存在我的項目文件夾中。我的.sh文件應該讀取一個文件並更新另一個文件的內容。它是直接從終端運行它的工作文件,但不是從java文件 – yAsH 2013-03-15 09:25:38

+0

+1的Path問題。我相信有一個exec()方法可以將工作目錄作爲最後一個參數(我認爲如果不適用,您可以將其餘部分清空) – SeKa 2013-03-15 09:28:38

+0

@ user2111009我還沒有在很長一段時間內從Java衍生出進程,所以我不能提供比我已經提供的更多具體信息。嘗試從腳本中明確設置CWD(使用'cd')。 – 2013-03-15 10:10:21