2009-12-29 3 views
0

Итак, у меня есть класс java, который принимает отдельные команды и помещает их в оболочку через объекты Runtime и Process. Моя проблема заключается в том, что я могу запустить такую ​​команду:Запуск сценариев оболочки через java

$ls /users/me/documents 

и он будет работать, но

$cd /users/me/documents 
$ls 

еще перечисляет корень. Очевидно, что объекты Process и runtime не отслеживают, где они находятся. Есть ли способ захватить объект терминала, или мне нужно отслеживать текущий каталог вручную?

ответ

2

Каждый сценарий оболочки начнет новый. Вам нужно будет нанизывать все ваши команды вместе:

cd /usr/me/documents && ls 

cd /usr/me/documents; ls 

Первый вариант будет работать только Ls, если компакт-диск был успешно (так, если директория была плохой, Ls не будет работать). Второй вариант всегда будет работать ls (поэтому, если каталог был плохим, ls будет запущен в каталоге по умолчанию).

+0

Хорошо, поэтому я просто отслеживаю путь и последний выход или что-то в этом роде. спасибо –

+0

Это может вызвать проблемы, если сами команды используют «&&» и другие специальные материалы. Я думаю, что лучше построить сценарий оболочки с каждой отдельной строкой. Однако это будет работать для простых вещей. – paxdiablo

2

Вы создаете отдельный процесс для каждой команды. Поместите команды в скрипт и выполните его в одном процессе.

2

Каждый, кто использует Runtime.exec, должен прочитать this.

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