首先,我們需要增加用戶對(duì)該腳本的執(zhí)行權(quán)限,即
String cmdstring = "chmod a+x test.sh";
Process proc = Runtime.getRuntime().exec(cmdstring);
proc.waitFor(); //阻塞,直到上述命令執(zhí)行完
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();
為什么要有上面那段操作呢?
原因是:可執(zhí)行程序的輸出可能會(huì)比較多,而運(yùn)行窗口的輸出緩沖區(qū)有限,會(huì)造成waitFor一直阻塞。解決的辦法是,利用Java提供的Process類(lèi)提供的getInputStream,getErrorStream方法讓Java虛擬機(jī)截獲被調(diào)用程序的標(biāo)準(zhǔn)輸出、錯(cuò)誤輸出,在waitfor()命令之前讀掉輸出緩沖區(qū)中的內(nèi)容。
希望大家能夠喜歡本文,有疑問(wèn)請(qǐng)給我留言。