2013-06-18 1 views
0

Я хочу, чтобы мое приложение запускало оболочку xterm и запускало команду «hg clone». Я не могу понять, почему же команда отлично работает, когда я печатаю его непосредственно к XTerm и не работает, когда моя программа использует:Как запустить команду «hg clone» в оболочке xterm из приложения Java?

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 схему для «разбора» строку командной строки. Он просто разбивается на кратные одно или несколько символов пробелов ... обрабатывает любые встроенные кавычки и другие метасимволы оболочки как данные.

Решение состоит в том, чтобы самостоятельно выполнить разделение команды/аргумента; например

Process p = Runtime.getRuntime().exec(new String[]{ 
     "xterm", 
     "-e", 
     "'hg --debug -v clone ssh://" + host + "/ " + 
       src + " " + dst + " ; read ;'"}); 

Теперь я получаю ошибку "Не удается запустить программу "Xterm": ошибка = 2, Нет такого файла или каталога"

  1. Программа «Xterm ", а не" x-term ". (Вам удалось получить это прямо до ...)

  2. Если это не проблема, попробуйте использовать абсолютный путь к программе.

  3. В любом случае, стоит попробовать понять сообщение об ошибке. В этом случае сообщение об ошибке явно говорит вам, что это не перспективы программы ... и она может говорит ты имя программы, что она не может работать.

+0

Благодарим вас за разъяснение.Похоже, вы правы. Но все равно должно быть что-то не так, потому что, как вы сказали, xterm даже не начинается. –

+0

Теперь я получаю сообщение об ошибке «Не могу запустить программу« x-term »: error = 2, Нет такого файла или каталога« –

+0

Я просто написал это неправильно. Проблема заключалась в цитатах рядом с последним аргументом. Спасибо за помощь. :) –