【问题标题】:Java ProcessBuilder: command not foundJava ProcessBuilder:找不到命令
【发布时间】:2010-10-15 13:57:58
【问题描述】:

我正在尝试运行我在 linux 上找到的一些 Java 代码。

    maudecmd = new String[files.length+5];
    maudecmd[0] = "maude";
    maudecmd[1] = "-no-banner";
    maudecmd[2] = "-no-ansi-color";
    maudecmd[3] = "-no-mixfix";
    maudecmd[4] = "-no-wrap";
    for(int i = 0; i < files.length; ++i) {
        maudecmd[5+i] = files[i];
    }

    ProcessBuilder pb = new ProcessBuilder(maudecmd);
    if(dir != null)
        pb.directory(dir);
    pb.redirectErrorStream(true);
    maude = pb.start();

这会引发 IOException - bash 找不到“maude”命令。

我在我的 .bashrc 文件中有这个别名:

alias maude='~/lib/maude/maude.linux'

如果我像这样更改代码:

maudecmd[0] = "/u/h/os215/lib/maude/maude.linux";

效果很好。

我想更改此代码,使其更健壮 - 如果有人可以在命令行上运行 Maude,则 ProcessBuilder 也应该能够使用它,无论用户必须使用何种特定方法将 Maude 链接起来。

这能实现吗?

【问题讨论】:

    标签: java linux processbuilder


    【解决方案1】:

    .bashrc 别名仅影响 BASH shell。您可以改为导出一个环境变量,但我不知道 Java 的 ProcessBuilder 是否也会选择它。

    话虽如此,但我不明白为什么这不起作用:
    maudecmd[0] = "/bin/bash maude";

    【讨论】:

      【解决方案2】:

      ProcessBuilder 只能启动真正的进程。这里maude是一个bash别名,所以只对bash可用。

      您可以使用环境变量而不是定义别名来指向可执行文件夹。或者只是将可执行路径作为应用程序的参数传递。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-02
        • 1970-01-01
        • 1970-01-01
        • 2018-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多