1

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 を実行できる場合、ユーザーが Maude をリンクする特定の方法が何であれ、ProcessBuilder もそれを使用できるはずです。

これは達成できますか?

4

2 に答える 2

4

.bashrcエイリアスは BASH シェルにのみ影響します。代わりに環境変数をエクスポートすることもできますが、Java の ProcessBuilder がそれを取得するかどうかはわかりません。

そうは言っても、なぜこれが機能しないのかわかりません:
maudecmd[0] = "/bin/bash maude";

于 2010-10-15T14:00:58.653 に答える
2

ProcessBuilder は、実際のプロセスのみを開始できます。maudeこれは bash エイリアスであるため、bash でのみ使用できます。

エイリアスを定義する代わりに、環境変数を使用して実行可能フォルダーを指すことができます。または、実行可能パスをアプリケーションの引数として渡すだけです。

于 2010-10-15T14:02:00.337 に答える