2013-06-18 37 views
0

我想讓我的應用程序運行xterm shell並運行命令「hg clone」。我不明白爲什麼同樣的命令完美的作品時,我直接鍵入它的xterm,當我的程序使用不工作:如何在java應用程序的xterm shell中運行「hg clone」命令?

Process p = Runtime.getRuntime().exec(command); 

其中的命令是:

"xterm -e " + "'hg --debug -v clone ssh://" + host + "/ "+ src + " " + dst + " ; read ;'" 

的xterm打開,我得到:

的xterm:無法execvp:「汞:沒有這樣的文件或目錄

你能幫助我,請

回答

2

簡短的回答是,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,沒有這樣的文件或目錄」

  1. 該計劃是爲「xterm 「,而不是」x-術語「。 (你在之前設法得到它)

  2. 如果這不是問題,請嘗試使用程序的絕對路徑名。

  3. 無論哪種方式,嘗試瞭解錯誤消息是個好主意。在這種情況下,該錯誤信息明明白白告訴你它不能運行程序......這告訴名稱,它不能運行的程序

+0

謝謝你的解釋。看起來你是對的。但仍然有一些問題,因爲像你說的那樣,xterm甚至不會啓動。 –

+0

現在我得到錯誤「無法運行程序」x-term「:error = 2,沒有這樣的文件或目錄」 –

+0

我只是寫錯了。問題在於最後一個參數附近的引號。感謝您的幫助。 :) –

相關問題