どのような状況でパスで最初に見つかった実行可能ファイルは使用されませんか?

どのような状況でパスで最初に見つかった実行可能ファイルは使用されませんか?

パスで実行可能ファイルの最初のエントリを使用せずにosx(homebrewを使用してインストールされた5.4.2_1)でzshを使用すると、奇妙な動作が発生します。

シナリオは次のとおりです。

echo $PATH返品:

/usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

醸造すべてそこにあります

/usr/local/Cellar/zplug/HEAD-9fdb388/bin     

そして

usr/local/bin/brew

これは実行によって確認されました。どの醸造酒返品:

/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew   
/usr/local/bin/brew

しかし、私が走るときどのようなビールですか?次を返します。

/usr/local/bin/brew

そして醸造/usr/local/bin/brew実際に代わりに実行/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew

Brewがルートの前半にあるとき、どのようにこれが起こりますか?

助けてくれてありがとう。

答え1

which -a cmdcmd実行権限を持つディレクトリで、すべての一般ファイル$path(別名、関数、組み込みファイルを除く)を見つけます。

whileはwhich cmd実行するコマンドを返しますzsh(inと似ていますが、他のほとんどのシェルとは異なり、組み込みコマンド)whichzshtcsh

zshhash他のほとんどのシェルと同様に、実行可能ファイルへのパスをテーブルに格納するため、呼び出すたびにすべてのディレクトリにそのファイルを見つける必要はありません。$path

ハッシュテーブル(の関連配列に公開されている)は、$commandsコマンド(標準POSIXシェルコマンド)を使用してzsh操作できます。hash

コマンドを追加する前または前にコマンドを実行した場合brewwhich/type/whence brewまたはコマンドの完了またはハッシュ/キャッシュを開始するすべてを使用して)、そのパスが 。/usr/local/Cellar/zplug/HEAD-9fdb388/bin/usr/local/Cellar/zplug/HEAD-9fdb388/bin$pathzsh$commands[brew]=/usr/local/bin/brew

この場合hash -r(Bourneシェルのように)またはrehash(cshのように)を使用して取得できます。zsh 忘れる記憶されたコマンド(無効隠れ家)そうすれば、次に新しい場所で探すことができます。

答え2

/usr/local/bin/brew通常はシンボリックリンクです。

だから/usr/local/bin/brewそして /usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew

おそらく同じファイルでしょう。

タイプ:

ls -al /usr/local/bin/brew

確認してください。

関連情報