2012-02-20 20 views
4

ProcessBuilderを使用してコマンドを実行すると、そのコマンドの検索場所はどのようにわかりますか? this hack/trick私はPATH変数(検査で確認されたprocessBuilder.environment())を悪く(空で作業ディレクトリなど)修正しましたが、ProcessBuilderはソート、エコー、bashなどを実行できます。どのようにこれをやっているのですか?JavaのProcessBuilderがコマンドを実行する場所はどこですか?

注:私の特定の開発環境はOSXですが、このコードはRed Hat Enterprise Linuxでも動作します。

答えて

5

ドキュメントは

を言う[...]コマンドがあれば、外部プログラムの起動されるファイルとその引数を意味する文字列のリスト。有効なオペレーティング・システム・コマンドを表す文字列リストは、システムによって異なります。 [...]

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

私はJVM /システムの振る舞いの完全な行列を見つけることができませんが、それはPATH環境変数にディレクトリを検索し、すなわち、おそらくそれはシステム(* NIXおよびWindows用のcmdbash)の人気の殻に似て振る舞います左から右へ移動し、見つかった最初の実行可能ファイルを実行します。

+0

あなたが私の追随する質問を見つけたのを見てください:-P明確にするために、私はOSXで走っていて、見た目を変更する方法があるのだろうかと思っています。 – Zugwalt

+1

うーん..私を打つ。待って、誰かが来て、これに答えるかどうかを見てみましょう。 'ProcessBuilder'がPATH変数に加えてチェックするいくつかのフォールバック機構を持たなければならないようです。 – aioobe

+0

OSXで1.7.0_51と私はPATHを見て得ることができません。コンストラクタ内のフルパスのみが動作します –

1

コマンドの検索を制御したい場合は、コマンドの検索を制御します。 ProcessBuilder検索を許可しないでください。独自のコードを使用して実行するものを探し、絶対パス名をパラメータにProcessBuilderに設定します。

+2

ProcessBuilderを使用して "sort"を実行する何かのユニットテストを作成しようとしています。私は見つからないソートをシミュレートしようとしていました。 – Zugwalt

関連する問題