パスに最初に出現する実行可能ファイルを使用しないosxでzsh(5.4.2_1をhomebrewと共にインストール)を使用すると、奇妙な動作が発生します。
ここにシナリオがあります:
echo $PATH
は次を返します:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
brewは両方にあります
/usr/local/Cellar/zplug/HEAD-9fdb388/bin
そして
usr/local/bin/brew
これはwhich -a brewを実行して確認されます。
/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
/usr/local/bin/brew
しかし、実行するとbrewが返されます。
/usr/local/bin/brew
そしてbrewは/usr/local/bin/brew
ではなく/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
を実行します
Brewがパスの早い段階にある場合、これはどのように起こりますか?
感謝します。
which -a cmd
は、_cmd
という名前のすべての通常ファイルを、$path
のディレクトリで(エイリアス、関数、組み込みに加えて)探します。
which cmd
はzsh
が実行するコマンドを返します(which
はzsh
と同様にtcsh
に組み込まれていますが、他のほとんどのシェルとは異なります)。
zsh
は、他のほとんどのシェルと同様、hash
テーブル内の実行可能ファイルのパスを記憶しているため、呼び出すたびに$path
内のすべてのディレクトリを検索する必要がありません。
そのハッシュテーブル(zsh
の$commands
連想配列で公開)は、hash
コマンド(標準のPOSIXシェルコマンド)で操作できます。
which/type/whence brew
に追加される前、または/usr/local/Cellar/zplug/HEAD-9fdb388/bin
が/usr/local/Cellar/zplug/HEAD-9fdb388/bin
に追加される前に、brew
コマンド(または$path
、またはコマンド補完またはそのハッシュ/キャッシュを準備するものを使用した)を実行した場合、zsh
はそのパスを記憶し、$commands[brew]=/usr/local/bin/brew
として保存します。
その場合、hash -r
(Bourne Shellのように)またはrehash
(cshのように)を使用してzsh
forget記憶されたコマンド(無効にする- cache)なので、次回それを検索して新しい場所で見つけることができます。
/usr/local/bin/brew
は通常シンボリックリンクです。
そう - /usr/local/bin/brew
および/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
おそらく同じファイルです。
タイプ:
ls -al /usr/local/bin/brew
確認するために。