天天看點

runtime.exec()windows下代碼(需轉碼)linux下代碼Java執行帶重定向或管道的shell指令的問題

          在單獨的程序中執行指定的字元串指令。

          在單獨的程序中執行指定指令和變量。

          在指定環境的獨立程序中執行指定指令和變量。

          在指定環境和工作目錄的獨立程序中執行指定的指令和變量。

          在指定環境的單獨程序中執行指定的字元串指令。

          在有指定環境和工作目錄的獨立程序中執行指定的字元串指令。

dir 指定了新子程序的工作目錄。如果 dir 為 null,那麼子程序會繼承目前程序的目前工作目錄

waitfor導緻目前線程等待,如有必要,一直要等到由該 <code>process</code> 對象表示的程序已經終止。如果已終止該子程序,此方法立即傳回。如果沒有終止該子程序,調用的線程将被阻塞,直到退出子程序,<code>0</code> 表示正常終止。

runtime.exec()windows下代碼(需轉碼)linux下代碼Java執行帶重定向或管道的shell指令的問題

一些平台隻為标準輸入輸出提供有限的緩存。錯誤的寫子程序的輸入流或者錯誤的都子程序的輸出流都有可能造成子程序的阻塞,甚至是死鎖。

getinputstream   得到正常資訊

runtime.exec() 不等同于直接執行command line指令!

runtime.exec()很有局限性,對有些指令不能直接把command line裡的内容當作string參數傳給exec().

比如重定向等指令。舉個例子:

javap -l xxx &gt; output.txt

這時要用到exec的第二種重載

把整個指令都當成/bin/sh的參數傳入

linux下

process p = runtime.getruntime().exec(new string[]{"/bin/sh","-c","javap -l xxx &gt; output.txt"});

windows下

process p = runtime.getruntime().exec(new string[]{"cmd","/c","javap -l xxx &gt; output.txt"});

linux執行shell腳本(帶參數)

1

假設有一個shell腳本檔案test.sh,有兩個參數parm1,parm2,java調用的方法如下:

string[] cmd = {"/bin/sh","-c","test.sh parm1 parm2"};

runtime.getruntime().exec(cmd);

2.

不帶參數

帶參數傳入數組

<a href="http://www.linuxidc.com/linux/2012-07/64526.htm" target="_blank">http://www.linuxidc.com/linux/2012-07/64526.htm</a>

<a href="http://www.linuxidc.com/linux/2012-07/64526.htm" target="_blank"></a>

上一篇: sqoop詳解