どことどこの違いは何ですか


16

wherewhichシェルコマンドの違いは何ですか?下記は用例です

 ~  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

私には、シェル組み込みコマンドと同じことをしているようですが、それがコマンドとどう違うのかはよくわかりませんか?

回答:


11

zshいくつかのシェルの1(されている他のものであるtcshwhichよう発祥cshのスクリプトcshもその限界を持っていたユーザーは、tcsh)その改良として組み込み製)which、それはシェル組み込みだから賢明な何かを、何とかあなたやあなたのOS (rcファイルを介して)whichシェルのインターンにアクセスできないため、シェルがコマンド名をどのように解釈するかを知ることができないため、確実に賢明なことは何もできないシステムコマンドの呼び出しに置き換えて破損しました。

zshの、の全てにおいてwhichtypewhenceおよびwhereすべてのコマンドが何であるかを知るために使用されるコマンド、組み込みが異なる出力です。それらはすべて歴史的な理由で存在しますwhence。コマンドに対する異なるフラグを使用して、すべての動作を取得できます。

次のコマンドを実行すると、それぞれの機能の詳細を取得できます。

info -f zsh --index-search=which

または、と入力info zshし、でインデックスを表示しi、組み込みの名前を入力します(補完が利用可能です)。

使用を避け/usr/bin/whichます。現在、それ whichが必要なシェルはありません。Timothyが言うように、シェルが提供するビルトインを使用します。ほとんどのPOSIXシェルはありますtypeコマンドを、あなたが使用することができますcommand -vのみ(両方ただし、コマンドのパスを取得するtypecommand -v、それらはすべてそうでない場合は、ほとんどで利用可能です)LSBでないもはやPOSIX(ただし、Unixのではオプションであり、あなたが遭遇する可能性が高いボーンのようなシェル)。

(ところで、それは/usr/binあなたの中で二度現れるように見えます$PATH、にを追加できtypeset -U pathます~/.zshrc


2
これは以前の質問でも出てきました。この点を拡張するには、シェルビルトインコマンドが存在する場合は常に使用する必要があります。そのため、bashでは、「which」ではなく「type」を使用します。
ティムB

素晴らしい答えとそのヒントにも感謝します。
nikhil
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.