java.io.IOException:无法运行程序“sh”(在目录“c:\ cygwin \ bin \ test”中):CreateProcess error = 2.系统找不到指定的文件

时间:2012-02-23 08:38:01

标签: java cygwin cygpath

我在java和cygwin的帮助下运行shell脚本。当我在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 :(得分:0)

首先尝试先获取指定文件的路径以确保它:

我不太确定,但这可能会让你领先一步:

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();

答案 1 :(得分:0)

在任何Windows路径声明之前,您必须将cygwin的bin目录添加到PATH环境变量中。

PATH=c:\cygwin\bin:RestWindowsPathVariables