1. 程式人生 > >java exec linux環境帶空格傳參問題

java exec linux環境帶空格傳參問題

近期在使用phantomjs做圖片匯出功能時發現一個奇怪的問題,java端使用Runtime.getRuntime().exec(cmd)呼叫一條語句,windows下執行正常,linux下報錯。樣例語句如下:

/home test.sh "2018-06-06 11:00"

java呼叫程式碼如下:

String cmd = "/home test.sh \"2018-06-06 11:00\"";
Process process = Runtime.getRuntime().exec(cmd);

test.sh內容如下:

echo $1;

預期的結果應輸出"2018-06-06 11:00"

,結果實際輸出的確是"2018-06-06,剩下的11:00"連同引號變成了$2。原因是linux錯誤地把空格當做了引數分隔符進行了截斷。
經過多次嘗試將java端程式碼改寫為如下格式既可避免此問題:

String[] cmd = new String[] {"/home test.sh","2018-06-06 11:00"};
Process process = Runtime.getRuntime().exec(cmd);

陣列的每一個元素即是一段引數,這種寫法就可以避免參數中的空格被linux錯誤截斷的問題。
問題雖然解決了但是仍然有疑惑:
1.為什麼在終端中直接輸入/home test.sh "2018-06-06 11:00"

就可以正確識別引數而不會出現此問題,而exec執行就不可以。
2.linux為什麼沒有識別引號,我記得引號包裹的內容中的空格linux是會忽略的。
還望知道的大牛解答一下疑惑。