java - 无法运行 Shell 脚本

标签 java cygwin

我正在尝试使用 Cygwin 从 Windows 操作系统运行 shell 脚本。当我从命令提示符运行时,它工作正常,因为我深入了解 C:\cygwin\bin 并运行 sh my_script.sh

当我通过代码尝试此操作时出现以下错误

C:\Java\jdk1.6\bin>java CmdProcessBuilder
Exception in thread "main" java.io.IOException: Cannot run program "C:\cygwin\bi
n\my_script.sh": CreateProcess error=193, %1 is not a valid Win32 application
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
        at CmdProcessBuilder.main(CmdProcessBuilder.java:13)
Caused by: java.io.IOException: CreateProcess error=193, %1 is not a valid Win32
 application
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
        at java.lang.ProcessImpl.start(ProcessImpl.java:30)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
        ... 1 more

以下是代码:

public static void main(String args[])
     throws InterruptedException,IOException
  {
    List<String> command = new ArrayList<String>();
    command.add(System.getenv("cygwin") +"\\bin\\"+"sh my_script.sh");

    ProcessBuilder builder = new ProcessBuilder(command);

    final Process process = builder.start();
    InputStream is = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line;
    while ((line = br.readLine()) != null) {
      System.out.println(line);
    }
    System.out.println("Program terminated!");
  }

当我在命令提示符下尝试cd cygwin\bin\sh my_script.sh时,它没有执行,并给出错误消息系统找不到指定的路径。

最佳答案

您可能会像这样使用 Runtime.exec 获得更好的运气:

String fs = System.getProperty("file.separator");
String command = System.getenv("cygwin") + fs + "bin" + fs + "sh my_script.sh";

Process p = Runtime.getRuntime().exec(command);

避免在路径中使用依赖于平台的字符串也是一种很好的做法。

关于java - 无法运行 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8208657/

相关文章:

windows - 如何使 yuicompressor jar 文件成为单例文件或全局可访问文件?

c++ - 热衷于在 cygwin 上安装 value.h 头文件 (c/c++)

Java 在创建由给定循环命名的变量时创建 for 循环

c++ - gcc、g++、cygwin 和 mingw 之间的关系?

java - Hibernate 可以自动管理子集合的顺序吗?

java - 获取星期几不使用日历

cygwin - 删除 cygwin 终端窗口装饰

git - 以 cygwin 和 Github for Windows 结尾的行

java - 将 Tomcat 配置为每个应用程序只生成一个 Servlet

java - 动态更改Java中库的返回值