あいまいな名前の実行可能ファイル

あいまいな名前の実行可能ファイル

tcsh2つの別々のフォルダで実行可能ファイルの名前をあいまいに指定すると、最近作成されたフォルダの実行可能$PATHファイルにリンクされているようです。私は正しいですか?これはいつも本当ですか?

答え1

一般的に言えば、見つかった順序で使用されます。$PATHなぜならそれが意図された用途だからです$PATH

このルールに例外がある可能性がありますが、そのためには、ソフトウェア内の適切なディレクトリを使用してコマンドをハードコーディングする必要があります。しかし、私はこのアプローチが悪いと思います。

答え2

同じディレクトリに同じ名前の2つのファイルを含めることはできません。複数のバージョンがある場合は、1つのバージョン(inとは異なるバージョン)がprogあり、環境変数によってどのバージョンが選択されているかが決まります。これはシェルを見ている家族の一人が行います(おそらく)。ここでは何も言いません。/usr/bin/usr/local/binPATHexec(3)PATHexecvp(3)

答え3

Solarisには通常、同じ名前の異なるバージョンのプログラムを含む2つのディレクトリ(実際には2つ以上)があります。例は、psで見つけることができます。と両方に表示される場合、実行されるバージョンはに最初に表示されるバージョンです。/usr/ucb/usr/bin/usr/ucb/usr/binPATHpsPATH

答え4

すべてのシェルはディレクトリを順番に移動し、見つかった$PATH最初のコマンドを実行します。たとえば、パスが/usr/local/bin:/usr/bin:/bin存在する場合はfromコマンドを実行し、/usr/local/bin存在しない場合はfromコマンドを実行します/usr/bin。コマンドがインストールされる順序は重要ではありません。

1つの例外があります。シェルがすでに実行されている間にプログラムをインストールしている場合、シェルはプログラムの場所をキャッシュに保持することができます。この場合、以前のプログラムは引き続き実行されます。たとえば、tcshを起動し、fooその時点でwhichを実行して/usr/bin/fooから別のバージョンのプログラムをインストールし、その/usr/local/bin/fooシェルから再度呼び出すと、foo実行され続けます/usr/bin/foo。新しく起動したシェルが起動します/usr/local/bin/foorehashtcshのコマンド位置キャッシュをクリアするには、コマンドを実行します。 Bashとzshで同等のコマンドは次のとおりですhash -r(zshでも理解されていますrehash)。

関連情報