我已经安装了Cygwin,但似乎无法直接访问任何命令。例如,由于找不到bash.exe,下面的过程无法启动,即使我指定了它的绝对路径。我知道它已正确安装,因为我可以在文件资源管理器中看到此路径。但是,搜索任何cygwin文件不会返回任何奇怪的命中。
ProcessBuilder pb = new ProcessBuilder("C:\\cygwin64\\bin\\bash.exe", "-c", "ls");
Process p = pb.start();
java.io.IOException: Cannot run program "C:\cygwin64\bin\bash.exe" (in directory "C:\Users\tyea1\Documents\Log Bundles\latest_PRODXIO01"): CreateProcess error=2, The system cannot find the file specified
如果我将cygwin的bin添加到Windows PATH变量,我可以通过成功执行“ls”
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "ls");
Process p = pb.start();
当它在PATH中时,我仍然无法直接访问bash.exe。
我不明白这里发生了什么以及为什么我不能直接执行bash.exe。
我没有完全回答我自己的问题,但发现了一些有效的方法。使用Windows PATH中的cygwin \ bin,我的进程构建器字符串是:
[cmd,/ c,C:\ cygwin64 \ bin \ sh.exe,-c,ls]
这似乎有效。我正在使用sh.exe而不是bash.exe,以便我可以使用所有cygwin的bin文件。