2013-03-15 3 views
3

Мне нужно запустить .sh-файл из моего Java-кода без передачи каких-либо аргументов. Я уже пытался сделать это сКак запустить файл .sh с Java?

Runtime.getRuntime().exec("src/lexparser.sh"); 

и

ProcessBuilder pb = new ProcessBuilder("src/lexparser.sh"); 
Process p = pb.start(); 

Оба указанных выше методов не работал. Есть ли какой-либо другой способ запуска .sh-файла формы Java?

+3

Что вы подразумеваете под _didn't work_? – Apurv

+0

убедитесь, что ваш .sh является исполняемым –

+0

какая ошибка вы получаете? – AmitG

ответ

8
ProcessBuilder pb = new ProcessBuilder("src/lexparser.sh", "myArg1", "myArg2"); 
Process p = pb.start(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line = null; 
while ((line = reader.readLine()) != null) 
{ 
    System.out.println(line); 
} 
+0

где вы используете ' Процесс p; '? – AmitG

+0

, чтобы начать processbuilder – Biswajit

+0

Я имею в виду, где вы используете ссылочную переменную 'p' в более позднем коде? – AmitG

3

Есть две вещи, которые легко пропустить:

  1. Путь и УХО. Самый простой способ убедиться, что исполняемый файл найден, - предоставить ему абсолютный путь, например /usr/local/bin/lexparser.sh

  2. Выход процесса. Вам нужно прочитать выход процесса. Вывод буферизуется, и если выходной буфер заполняется, процесс размножения зависает.

+0

Я сохранил файл .sh в папке проекта. Файл .sh должен читать файл и обновлять содержимое другого файла. Это рабочий файл, когда я запускаю его непосредственно из терминала, но не из java-файла – yAsH

+0

+1 для проблемы Path. Я считаю, что существует метод exec(), который может принимать в рабочем каталоге как последний аргумент (и я думаю, что вы можете исключить остальные, если n/a) – SeKa

+0

@ user2111009 Я не запускал процессы с Java в течение длительного времени , поэтому я не могу предоставить более конкретную информацию, чем то, что я уже предоставил. Попробуйте установить CWD явно изнутри скрипта (используя 'cd'). –

Смежные вопросы