Запуск Shell Script в командной строке - PullRequest
1 голос
/ 27 декабря 2011

Я запускаю сценарий оболочки, используя cygwin.

Process p;
InputStream in;
BufferedReader br;
String line;
String cmd;
cmd = "D:/cygwin/bin/bash -c '/bin/test/app.sh" +three_ltr_id+""+mon_code+""+year_code+""+part_no+""+version_no+" '";
System.out.println("EXECUTING: " + cmd);
p = Runtime.getRuntime().exec(cmd);
in = p.getInputStream();
p.waitFor();
 br = new BufferedReader(new InputStreamReader(in));
 System.out.println("OUT:");
 while ((line = br.readLine()) != null) {
 System.out.println(line);
 System.out.println("SCRIPT EXECUTED PROPERLY");

Это показывает EXECUTING и команды, которые я передал скрипту.

Если я захожу в папку D: / cygwin / bin / test и запускаюта же команда работает.

Когда я запускаю ту же команду в командной строке, она не работает.

1 Ответ

2 голосов
/ 27 декабря 2011

Вам нужно немедленно начать читать входные данные из p.getInputStream () и продолжать читать, пока их больше не будет. В Windows мало или нет буфера в канале, и процесс будет зависать после его заполнения.

То же самое верно для потока ошибок. Вы можете запускать потоки для чтения обоих потоков, или есть способ запуска процессов для объединения обычных выходных данных и ошибок, и вы можете просто прочитать их оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...