首先,我們需要增加用戶對該腳本的執行權限,即
複製代碼代碼如下:
String cmdstring = "chmod a+x test.sh";
Process proc = Runtime.getRuntime().exec(cmdstring);
proc.waitFor(); //阻塞,直到上述命令執行完
cmdstring = "bash test.sh"; //這裡也可以是ksh等
proc = Runtime.getRuntime().exec(cmdstring);
// 注意下面的操作
string ls_1;
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(proc.getInputStream());
while ( (ls_1=bufferedReader.readLine()) != null);
bufferedReader.close();
proc.waitFor();
為什麼要有上面那段操作呢?
原因是:可執行程序的輸出可能會比較多,而運行窗口的輸出緩衝區有限,會造成waitFor一直阻塞。解決的辦法是,利用Java提供的Process類提供的getInputStream,getErrorStream方法讓Java虛擬機截獲被調用程序的標準輸出、錯誤輸出,在waitfor()命令之前讀掉輸出緩衝區中的內容。
希望大家能夠喜歡本文,有疑問請給我留言。