【问题标题】:Why can't I execute a Cygwin .exe directly with Java on Windows?为什么我不能在 Windows 上直接使用 Java 执行 Cygwin .exe?
【发布时间】: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吗?并运行lsls -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


【解决方案1】:

我还没有完全回答我自己的问题,但找到了一些可行的方法。使用 Windows PATH 中的 cygwin \bin,我的进程构建器字符串是:

[cmd, /c, C:\cygwin64\bin\sh.exe, -c, ls]

这似乎有效。我使用的是 sh.exe 而不是 bash.exe,这样我就可以使用 cygwin 的所有 bin 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多