パスで実行可能ファイルの最初のエントリを使用せずに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 cmd
cmd
実行権限を持つディレクトリで、すべての一般ファイル$path
(別名、関数、組み込みファイルを除く)を見つけます。
whileはwhich cmd
実行するコマンドを返しますzsh
(inと似ていますが、他のほとんどのシェルとは異なり、組み込みコマンド)which
。zsh
tcsh
zsh
hash
他のほとんどのシェルと同様に、実行可能ファイルへのパスをテーブルに格納するため、呼び出すたびにすべてのディレクトリにそのファイルを見つける必要はありません。$path
ハッシュテーブル(の関連配列に公開されている)は、$commands
コマンド(標準POSIXシェルコマンド)を使用してzsh
操作できます。hash
コマンドを追加する前または前にコマンドを実行した場合brew
(which/type/whence brew
またはコマンドの完了またはハッシュ/キャッシュを開始するすべてを使用して)、そのパスが 。/usr/local/Cellar/zplug/HEAD-9fdb388/bin
/usr/local/Cellar/zplug/HEAD-9fdb388/bin
$path
zsh
$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
確認してください。