簡短的回答是,exec(String)
不理解引號。
你的表達:
"xterm -e " + "'hg --debug -v clone ssh://" + host + "/ " +
src + " " + dst + " ; read ;'"
是要給你一個字符串是這樣的:
"xterm -e 'hg --debug -v clone ssh://host/src dst; read ;'"
這將被分成命令和參數等價於:
new String[] {"xterm", "-e", "'hg", "--debug", "-v", "clone",
"ssh://host/src", "dst;", "read", ";'"}
哪個是垃圾。 (它告訴xterm
運行'hg
命令!)
的問題是,exec(String)
使用的「解析」的命令行字符串niave方案。它只是將多個一個或多個空白字符分開...... 將任何嵌入式引號和其他shell元字符視爲數據。
解決方案是自己分割命令/參數;例如
Process p = Runtime.getRuntime().exec(new String[]{
"xterm",
"-e",
"'hg --debug -v clone ssh://" + host + "/ " +
src + " " + dst + " ; read ;'"});
現在,我得到錯誤 「無法運行程序 」的xterm「:錯誤= 2,沒有這樣的文件或目錄」
該計劃是爲「xterm 「,而不是」x-術語「。 (你在之前設法得到它)
如果這不是問題,請嘗試使用程序的絕對路徑名。
無論哪種方式,嘗試瞭解錯誤消息是個好主意。在這種情況下,該錯誤信息明明白白告訴你它不能運行程序......這告訴你名稱,它不能運行的程序。
謝謝你的解釋。看起來你是對的。但仍然有一些問題,因爲像你說的那樣,xterm甚至不會啓動。 –
現在我得到錯誤「無法運行程序」x-term「:error = 2,沒有這樣的文件或目錄」 –
我只是寫錯了。問題在於最後一個參數附近的引號。感謝您的幫助。 :) –