3

我在 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

4

2 回答 2

1

在 PATH 变量中,您需要将 cygwin 的 bin 目录放在任何其他 Windows 路径之前。

做这个:

PATH=c:\cygwin\bin:RestWindowsPaths

不是那个:

PATH=RestWindowsPathVariables:c:\cygwin\bin
于 2013-03-28T19:05:58.903 回答
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();
于 2012-02-23T08:54:39.633 回答