Как запустить две разные команды с помощью компоновщика процессов - PullRequest
1 голос
/ 14 февраля 2012

Извините, если я снова открываю тот же вопрос.Я хочу запустить две команды

  1. D: \ cygwin \ bin \ Test

  2. sh app.sh AK-RD 02.20 D: \ cygwin\ bin \ Test_files

Выше две команды, которые я хочу выполнить в одной командной строке. Это означает, что мне нужно войти внутрь D: \ cygwin \ bin \ Test Папка и в том же приглашении хотят выполнить следующую команду

sh app.sh AK-RD 02.20 D: \ cygwin \ bin \ Test_files

Команда будет выглядеть так,

Команда: - D: \ cygwin \ bin \ Test> sh app.sh AK-RD 02.20 D: \ cygwin \ bin \ Test_files

Как сделатьэто с помощью Process Builder в Java.Или есть какой-нибудь другой способ сделать это.

String cmd;   
   cmd = "sh app.sh AK-RD 02.20 D:\\cygwin\\bin\\Test_files";
    ProcessBuilder probuilder = new ProcessBuilder( cmd );
    probuilder.directory(new File("D:\\cygwin\\bin\\Test"));
    Process process = probuilder.start();

Это мне не поможет, даже если я изменю probuilder.directory в коде.Я получаю

Cannot run program "'sh app.sh AK-RD 02.20 D:\\cygwin\\bin\\Test_files  CreateProcess error=2, The system cannot find the file specified

Ответы [ 2 ]

0 голосов
/ 14 февраля 2012

Ошибка означает, что система не может найти файл sh app.sh AK-RD 02.20 D:\\cygwin\\bin\\Test_files.exe в пути.

Это означает, что ProcessBuilder интерпретирует всю строку (включая обратную косую черту, пробелы и все) как имя команды. Это не то, что вы хотите.

Разделить команду на отдельные слова:

ProcessBuilder pb = new ProcessBuilder( "sh", "app.sh", "AK-RD", "02.20", "D:\\cygwin\\bin\\Test_files" );

и используйте pb.directory() до CD в правильном каталоге.

В качестве альтернативы, поместите все в скрипт BAT / CMD и запустите его с ProcessBuilder

0 голосов
/ 14 февраля 2012

Вы можете позвонить

ProcessBuilder pb = new ProcessBuilder();
pd.directory(new File("D:\\cygwin\\bin\\Test"));

для установки рабочего каталога.

Edit:

Вы также можете попытаться разбить вашу команду на аргументы

String cmd[] = new String[5];
cmd[0] = "sh";
cmd[1] = "app.sh";
cmd[2] = "AK-RD";
cmd[3] = "02.20";
cmd[4] = "D:\\cygwin\\bin\\Test_files";
...