2011-10-30 41 views
1

我試着從Java程序運行一個shell腳本,但整個腳本沒有被執行。想法爲什麼我們會遇到這樣的問題?只從Java程序執行腳本的一部分

的Java代碼執行shell腳本:

File file = new File("/path/to/script"); 
String COMMAND= "./run"; 
ProcessBuilder p = new ProcessBuilder(COMMAND); 
p.directory(file); 
try { 
    Process startProcess= p.start(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

腳本運行正常,但不執行整個腳本。似乎只有第一行正在執行。

+0

腳本的第一行是什麼?你是否只有第一條線路運行? – Mat

+0

另請參閱此可能的重複:[無法從java(使用ProcessBuilder)啓動程序](http://stackoverflow.com/questions/1043611/failure-to-start-program-from-java-using-processbuilder) – trashgod

+0

每當我聽說過這個問題,並且看到上面的代碼,它提醒我建議閱讀並執行[When Runtime.exec()的所有提示不會](http://www.javaworld.com/javaworld/jw- 12-2000/JW-1229-traps.html)。消費(並以某種方式報告)「Process」的'System.out' /'err'可能是照亮的(或者甚至是問題的根源)。 –

回答

1

如果您確定該腳本開始運行,則問題不在java中,而是在腳本本身中。

差異的原因可能是錯誤的路徑或錯誤的環境。當您從控制檯運行腳本時,您處於用戶環境中,因此腳本可以使用所有環境變量。

嘗試添加一些調試輸出來解決問題。

+0

嗨, 腳本運行良好,當我通過終端在Ubuntu上運行它。但是相同的腳本並不是完全從java程序執行的。該腳本有一些tinyos命令。 當我試圖用'make'來運行帶有tinyos命令的腳本時,我也遇到了同樣的問題。 謝謝。 – Ashish

+0

幾乎可以肯定的是,您的終端設置中的PATH設置爲單向,而在您的Java環境中則不同。正如AlexR所說,向腳本添加一些調試消息,或者將完整路徑前綴添加到您在腳本中執行的所有命令。祝你好運。 – shellter

+0

嗨,路徑沒有問題,我猜,問題是環境變量。腳本中未執行的部分是: if cygpath -w />/dev/null 2>/dev/null;然後 CLASSPATH = 「oscilloscope.jar; $ CLASSPATH」 其他 CLASSPATH = 「oscilloscope.jar:$ CLASSPATH」 網絡 java的示波器 此外,回聲......劇本里沒有給出任何輸出,當腳本從java程序執行。當我從終端運行腳本時,我可以看到輸出。 Ashish。 – Ashish