這不是我第一次試圖從Java執行系統命令;但這次它變得非常困難。我有一個從終端執行得很好的腳本。它從一個文件(input.txt)讀取輸入,處理它並將結果導出到另一個文件(ouput.txt)。整件事情持續不超過1秒。但是,當我嘗試從Java執行它時,它會卡住,永遠不會結束。這是我的代碼:Java無法執行系統命令(Ubuntu)
Process p = new ProcessBuilder("./runCalculator.sh").start();
p.waitFor();
我也試圖與Runtime.getRuntime().exec("./runCalculator.sh")
,但都是一樣的。我已經讀取了這個過程的InputStream和ErrorStream。錯誤流不會返回任何內容,但會顯示一條消息,如「開始計算...」
任何想法?
謝謝,這對我有用!但爲什麼? –
因爲您必須真正運行「bash」(或「sh」),這是解釋器。並且你傳遞你想執行的命令(對於bash,這是通過'-c'選項傳遞的) –
@Pantelis如果你傳遞給ProcessBuilder ctr的文件是一個可執行文件,你原來的代碼會起作用。因爲它是shell腳本runCalculator.sh,shell(bash或sh)是解釋shell腳本命令並運行它們所需的可執行程序文件。在命令行運行$ file/usr/bin/bash,並將輸出與正在運行的$文件./runCalculator.sh進行比較 –