tcsh
2つの別々のフォルダで実行可能ファイルの名前をあいまいに指定すると、最近作成されたフォルダの実行可能$PATH
ファイルにリンクされているようです。私は正しいですか?これはいつも本当ですか?
答え1
一般的に言えば、見つかった順序で使用されます。$PATH
なぜならそれが意図された用途だからです$PATH
。
このルールに例外がある可能性がありますが、そのためには、ソフトウェア内の適切なディレクトリを使用してコマンドをハードコーディングする必要があります。しかし、私はこのアプローチが悪いと思います。
答え2
同じディレクトリに同じ名前の2つのファイルを含めることはできません。複数のバージョンがある場合は、1つのバージョン(inとは異なるバージョン)がprog
あり、環境変数によってどのバージョンが選択されているかが決まります。これはシェルを見ている家族の一人が行います(おそらく)。ここでは何も言いません。/usr/bin
/usr/local/bin
PATH
exec(3)
PATH
execvp(3)
答え3
Solarisには通常、同じ名前の異なるバージョンのプログラムを含む2つのディレクトリ(実際には2つ以上)があります。例は、ps
で見つけることができます。と両方に表示される場合、実行されるバージョンはに最初に表示されるバージョンです。/usr/ucb
/usr/bin
/usr/ucb
/usr/bin
PATH
ps
PATH
答え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/foo
。rehash
tcshのコマンド位置キャッシュをクリアするには、コマンドを実行します。 Bashとzshで同等のコマンドは次のとおりですhash -r
(zshでも理解されていますrehash
)。