Короткий ответ: 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 схему для «разбора» строку командной строки. Он просто разбивается на кратные одно или несколько символов пробелов ... обрабатывает любые встроенные кавычки и другие метасимволы оболочки как данные.
Решение состоит в том, чтобы самостоятельно выполнить разделение команды/аргумента; например
Process p = Runtime.getRuntime().exec(new String[]{
"xterm",
"-e",
"'hg --debug -v clone ssh://" + host + "/ " +
src + " " + dst + " ; read ;'"});
Теперь я получаю ошибку "Не удается запустить программу "Xterm": ошибка = 2, Нет такого файла или каталога"
Программа «Xterm ", а не" x-term ". (Вам удалось получить это прямо до ...)
Если это не проблема, попробуйте использовать абсолютный путь к программе.
В любом случае, стоит попробовать понять сообщение об ошибке. В этом случае сообщение об ошибке явно говорит вам, что это не перспективы программы ... и она может говорит ты имя программы, что она не может работать.
Благодарим вас за разъяснение.Похоже, вы правы. Но все равно должно быть что-то не так, потому что, как вы сказали, xterm даже не начинается. –
Теперь я получаю сообщение об ошибке «Не могу запустить программу« x-term »: error = 2, Нет такого файла или каталога« –
Я просто написал это неправильно. Проблема заключалась в цитатах рядом с последним аргументом. Спасибо за помощь. :) –