2

我有一个适用于 Linux 的代码,它在 unix shell 上执行 .sh 文件。

我想为 Windows 运行相同的代码。有人告诉我我应该为 windows 安装 cygwin。我这样做了,但现在如何将命令重定向到 cygwin shell?

这是我的代码的一部分:

public void compile() {
    try {
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dir + "/" + file)));
        out.write(contents);
        out.close();
        // create the compiler script
        out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(dir + "\\compile.sh")));
        out.write("cd \"" + dir +"\"\n");
        out.write("gcc -lm " + file + " 2> err.txt");

        Runtime r = Runtime.getRuntime();
        Process p = r.exec( dir + "\\compile.sh");
        p.waitFor();
        p = r.exec(dir + "\\compile.sh"); // execute the compiler script
        TimedShell shell = new TimedShell(this, p, timeout);
        shell.start();
        p.waitFor();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

如何重定向到 cygwin shell 并运行 shell 脚本?

4

1 回答 1

2

Exec C:/cygwin/bin/bash.exe(或C:/cygwin/bin/sh.exe,或任何 Cygwin 的路径/bin/<shell>.exe),然后将脚本作为参数传递。

不过还有一个皱纹。没有 Cygwin 原生的全功能 JVM,因此您可能会使用 Windows 安装和使用的 JVM。这意味着 'PATH' 和其他环境变量的值可能不是您在启动 shell 时所期望的,您可能需要使用cygpath将 Java 传递的任何路径从 Windows 路径转换为 ​​Cygwin 路径,可能包括0 美元。

于 2013-05-09T21:47:42.180 回答