where
それとwhich
シェルコマンドの違いは何ですか?ここにいくつかの例があります。
~ where cc
/usr/bin/cc
/usr/bin/cc
~ which cc
/usr/bin/cc
そして
~ which which
which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
/usr/bin/which
~ which where
/usr/bin/which: no where in (/usr/local/bin:/bin:/usr/bin:/home/bnikhil/bin:/bin)
返品
~ where which
which: aliased to alias | /usr/bin/which --tty-only --read-alias --show-dot
--show-tilde
which: shell built-in command
/usr/bin/which
/usr/bin/which
~ where where
where: shell built-in command
私にとって、彼らは同じことをするようです。一つは組み込みシェルです。これがコマンドとどう違うのかよくわかりません。
答え1
zsh
シェルに組み込まれているため、いくつかの合理的なタスクを実行する数少ないシェルの1つです(他のシェルはtcsh
(which
元のユーザーcsh
スクリプトとしてcsh
、tcsh
改良として組み込まれる制限もあります))、which
またはOS(一部のrc
ファイルを介して)がシェルのインターンにアクセスできないため、合理的な操作を確実に実行できないシステムコマンドへの呼び出しで置き換えることで、これを壊しましたwhich
。したがって、シェルがどのように機能するかを知る方法はありません。コマンド名を解釈します。
zshでは、すべてwhich
、type
、whence
そしてwhere
組み込みコマンドはどちらもコマンドが何であるかを見つけるために使用されますが、出力は異なります。それらはすべて歴史的な理由で存在し、他のフラグを使用してすべての動作を取得できます。whence
注文する。
次のコマンドを実行すると、各関数の詳細を確認できます。
info zsh which
info zsh whence
...
または を入力info zsh
した後、 でインデックスを呼び出し、組み込みi
名を入力します(可能)。
今それを使用しないでください/usr/bin/which
。それ which
必要です。 Timothyが言ったように、シェルが提供する組み込み機能を使用してください。ほとんどのPOSIXシェルにはこのコマンドがあり、コマンドへのパスを取得するためtype
にのみ使用できます。 (および両方ともPOSIXではオプションですが(UnixではなくLSBではなく)、ほとんどの場合使用できます。Bourneのようなシェル)。command -v
type
command -v
(ところで、あなたのアイテムに2回現れるようです。あなたのアイテムに追加することが/usr/bin
できます。)$PATH
typeset -U path
~/.zshrc
答え2
違い1:
良い機能の違いに言及したい私はあなたの質問自体で観察しました:
which
渡されたパラメータを持つ最初のパスが一覧表示されます。
where
すべてのパスが一覧表示され、渡されたパラメータを見つけます。
例えば
~ which tree
/bin/tree
~ where tree
/bin/tree
/usr/bin/tree
違い2:
where
UnixだけでなくWindowsでも同様です。