java.io.IOException: не удается запустить программу "sh" (в каталоге "c: \ cygwin \ bin \ test"): ошибка CreateProcess = 2. Система не может найти указанный файл - PullRequest
1 голос
/ 23 февраля 2012

Я запускаю сценарии оболочки с помощью Java и Cygwin. Когда я запускаю свой код в Windows XP, он работает нормально. Теперь я пытаюсь запустить тот же код на Windows 7, я получаю выше ошибка.

(java.io.IOException)java.io.IOException:
Cannot run program "sh" (in directory"c:\cygwin\bin\test"):
CreateProcess error=2.The system cannot find file specified

Почему произошла эта ошибка. Я установил свой путь для cygwin (PATH=.;c:\cygwin\bin) Как этого избежать.

ProcessBuilder pb = new ProcessBuilder ();
pb.directory(new File("C:\\cygwin\\bin\\Test\\"));
File shellfile = new File("app.sh");//File name with extension
System.out.println(shellfile.getCanonicalPath());

Но он выводит как E:\NIRAJ\example\app.sh, что есть в моей Java-программе. даже я устанавливаю pb.directory к пути.

если я проверю System.out.print(pb.directory());, это даст мне вывод C:\cygwin\bin\Test

Ответы [ 2 ]

0 голосов
/ 28 марта 2013

Вы должны добавить каталог bin cygwin в переменную среды PATH перед любым объявлением пути Windows.

PATH=c:\cygwin\bin:RestWindowsPathVariables
0 голосов
/ 23 февраля 2012

Сначала попробуйте получить путь к указанному файлу, чтобы убедиться в этом:

Я не очень уверен, но это может привести вас на шаг вперед:

File file = new File("app.sh");//File name with extension
System.out.println(file.getCanonicalPath());

Это должно напечатать: c:\cygwin\bin\test Также используйте вместо этого разделитель: c:\\cygwin\\bin\\test

Надеюсь, это поможет.

ОБНОВЛЕНИЕ

String myCommand = "c:\\cygwin\\bin\\test\\cygbin";
String myArg = PATH_TO_shellscript+"app.sh";
ProcessBuilder p = new ProcessBuilder(myCommand, myArg).start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...