5

を使用してコマンドを実行する場合ProcessBuilder、そのコマンドを検索する場所をどのように認識しますか? このハック/トリックを使用して、PATH 変数 (を調べて確認processBuilder.environment()) を修正しました (空、作業ディレクトリなど) が、ProcessBuilder は引き続きソート、エコー、bash などを正常に実行できます。これはどうやってやっているのですか?

注: 私の特定の開発環境は OSX ですが、このコードは Red Hat Enterprise Linux でも実行されます。

4

2 に答える 2

5

ドキュメントによると

[...] コマンド、呼び出される外部プログラム ファイルとその引数 (存在する場合) を示す文字列のリスト。どの文字列リストが有効なオペレーティング システム コマンドを表すかは、システムによって異なります。[...]

つまり、実行するプログラムを探す場所は、実行している特定のシステムと JVM によって異なります。

bashJVM / システムの動作の完全なマトリックスを見つけることはできませんが、システムの一般的なシェル ( *nix およびWindows の場合) と同様に動作すると思われcmdます。つまり、環境変数のディレクトリをPATH左から右に検索し、最初に見つかった実行可能ファイル。

于 2012-02-20T21:29:45.157 に答える
1

検索コマンドを制御したい場合は、検索コマンドを制御します。ProcessBuilder検索させないでください。独自のコードを使用して実行したいものを見つけ、絶対パス名をパラメーターに入れますProcessBuilder

于 2012-02-20T23:47:34.010 に答える