java exec linux環境帶空格傳參問題
阿新 • • 發佈:2018-11-05
近期在使用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"
2.linux為什麼沒有識別引號,我記得引號包裹的內容中的空格linux是會忽略的。
還望知道的大牛解答一下疑惑。