【发布时间】:2019-02-22 01:10:59
【问题描述】:
我已经安装了 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();
当 bash.exe 在 PATH 中时,我仍然无法直接访问它。
我不明白这里发生了什么以及为什么我不能直接执行 bash.exe。
【问题讨论】:
-
我无法重现此错误。我还在 c:\cygwin64 中安装了 Cygwin,我只是尝试使用您的代码编写一个简单的 Java 程序。它根本不会复制。
-
我在 Mac Bootcamp 中运行 Windows 10 ISO 映像。 Windows 操作系统未使用产品密钥激活,但它可以工作。会不会是个问题?
-
你能用
c:\cygwin64\Cygwin.bat启动cygwin吗?并运行ls或ls -a。如果没有,那就去做吧!如果可行,请重试,或尝试使用ProcessBuilder("C:\\cygwin64\\bin\\bash.exe", "--login", "-c", "ls")。 -
我也不能使用 cygwin.bat。它抱怨 bash。我不知道发生了什么事。 bash:无法设置终端进程组(-1):设备 bash 的 ioctl 不合适:此 shell 中没有作业控制
-
我越来越近了。这是我的 ProcessBuilder 字符串: [cmd, /c, C:\cygwin64\bin\sh.exe, -c, ls] 在 Java 中读取输出给我“文件名、目录名或卷标语法不正确。 "但是如果我直接在cmd中执行“C:\cygwin64\bin\sh.exe -c ls”,输出就是我所期望的。
标签: java windows cygwin processbuilder