简短的回答是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)
使用了一种简单的方案来“解析”命令行字符串。它只是拆分一个或多个空白字符的倍数...将任何嵌入的引号和其他 shell 元字符视为数据。
解决方案是自己进行命令/参数拆分;例如
Process p = Runtime.getRuntime().exec(new String[]{
"xterm",
"-e",
"'hg --debug -v clone ssh://" + host + "/ " +
src + " " + dst + " ; read ;'"});
现在我收到错误“无法运行程序“x-term”:错误 = 2,没有这样的文件或目录”
该程序是“xterm”,而不是“x-term”。(你之前设法做到了......)
如果这不是问题,请尝试使用程序的绝对路径名。
无论哪种方式,尝试理解错误消息都是一个好主意。在这种情况下,错误消息清楚地告诉您它无法运行该程序......并且它告诉您它无法运行的程序的名称。