2013-10-29 84 views
-2

我想從Java程序運行linux腳本,並且只在腳本停止時繼續執行程序。我不感興趣閱讀腳本輸出...任何人都可以幫助我嗎? 非常感謝, 和原諒我的英語不好如何從Java運行linux腳本

+0

那麼你有什麼嘗試?你卡在哪裏? –

+1

你需要一個過程。 請參閱[如何使用Java執行系統命令(linux/bsd)](http://stackoverflow.com/a/792049/416300) – summerbulb

+1

請參閱http://stackoverflow.com/questions/18545921/run-linux -script-from-java/18546394#18546394 – A4L

回答

2

假設所有其他線程處於空閒狀態:

// run the script. 
Process proc = Runtime.getRuntime().exec("/path/to/myscript"); 
// wait for the return code. 
int ecode = proc.waitFor(); 

如果你有更復雜的參數給你的腳本,或者需要監視STDOUT,STDERR,或需要其他修改(例如將數據提供給STDIN,或更改執行目錄,環境變量等),那麼您應該執行相同的有效過程,但不應使用Runtime.exec(...),而應該手動構建並啓動過程。請閱讀Process javadocProcessBuilder javadoc關於如何設置並啓動它。

+0

這隻會工作如果腳本沒有(或很少)輸出。否則它會阻塞並等待某些內容讀取該輸出。 –

+0

OP的q似乎是一個非常簡單的...我假設,我承認,所以我已經編輯過,添加引用來尋找更復雜情況的更多信息。 – rolfl

+0

對不起形成的問題,我真正的問題是,我可以執行我的腳本之前,我必須去特定的目錄。如果我的腳本路徑是/ quota_users/home/Hier_CarryReverse/syn/runme首先我必須執行cd/quota_users/home/Hier_CarryReverse/syn /然後./runme。我沒有成功使用rolfl示例我有一個錯誤,說不能運行程序「cd/quota_users/home/Hier_CarryReverse/syn」:java.io.IOException:error = 2,沒有這樣的文件或目錄 – s0ld13r

1

您也可以啓動bash的解釋,而不是

Process proc = Runtime.getRuntime().exec("/bin/bash /path/to/myscript"); 
int ecode = proc.waitFor(); 

這可能在一些通常破情況下工作時@rolfl解決方案可能無法正常工作(非可執行的腳本文件,#!/頭丟失等)