java.io.IOException:无法运行程序“sh” (在目录“c:\cygwin\bin\test”中):CreateProcess error=2.系统找不到指定的文件
我在 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
I am running shell scripts with the help of java and cygwin. When i am running my code in windows xp it works fine. Now i am trying to run same code on windows 7 i am getting above error.
(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
Why this error occurred.I have set my path for cygwin (PATH=.;c:\cygwin\bin)
How to avoid this.
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());
But it is giving the output as E:\NIRAJ\example\app.sh
which is in my java program. even i am setting up pb.directory to the path.
if i check System.out.print(pb.directory());
it gives me output C:\cygwin\bin\Test
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 PATH 变量中,您需要将 cygwin 的 bin 目录放在任何其他 Windows 路径之前。
这样做:
不是那样:
In PATH variable, you need to put cygwin's bin directory before any other Windows' paths.
Do this:
Not that:
首先尝试先获取指定文件的路径以确保它:
我不太确定但这可能会让您领先一步:
这应该打印:
c:\cygwin\bin\test
也可以使用这样的分隔符:
c:\\cygwin\\bin\\test
希望这会有所帮助。
更新
First try to get the path of specified file first to ensure it:
I am not much sure but this may lead you one step ahead :
This should print :
c:\cygwin\bin\test
Also use separator like this instead :
c:\\cygwin\\bin\\test
Hope this helps.
UPDATE