「which」用のbashビルトインはありますか?


16

最小限のFedoraインストールをテストしています。pythonやnodeなどのインタープリターのパスを確認するには、通常を使用しますwhich

I通知はwhichデフォルトではインストールされません。パッケージを追加することはできましたが、この一般的なタスクを実行するために使用できるシェルビルトインがあるのではないかと思います。

私はbash 4.2を使用しています。


1
どういうわけか、Windowsの同等のものを検索した結果、私はここに来ました。将来の視聴者向け:「where」は、指定されたファイルのパスを示します。
ラバーダック14

1
このQに出くわした人には、このU&LのQ&Aも読むことをお勧めします。それはあなたが今まで知りたかったすべてをカバーしますwhich「which」を使用しないのはなぜですか?次に何を使用しますか?
slm 14

回答:


26

typeBashビルトインであるを使用できます。

$ type -P which
which is /usr/bin/which

ドキュメントについては、参照help [t]ypeを指し、typeセクションbashのmanページを参照してください。

文字列 "type" で始まる2つのビルトインのhelp typeヘルプページを印刷します。そのうちの1つは廃止され、これとはまったく関係ありません。)


3
私はtype -a自分が好きです。なぜかっこは[t]ype
グレンジャックマン14

type -a入力時に実行されるものだけでなく、引数が指すすべてのものを出力します。
l0b0 14

2
このQに出くわした人には、このU&LのQ&Aも読むことをお勧めします。それはあなたが今まで知りたかったすべてをカバーしますwhich「which」を使用しないのはなぜですか?次に何を使用しますか?
SLM

リストの最初のものは、type -a常にそれが実行するものです。私はグレンと同じことをし、常に使用していtype -aます。
slm 14

1
type -pコマンドがエイリアスの場合、パスを表示しません。type -P常にコマンドパスを正しく表示します。おもう。受け入れられた回答をtype -P@ l0b0
dirigeant

10

typeまたはを使用できますcommand -v。の出力typeは人間が読める形式です。の出力はcommand -vBashで実行できます。

実際には少し異なることに注意してください。typeそしてcommand、コマンドのハッシュされた値を調べます。つまり、を入力した場合cmdtype cmdまたはcommand -v cmd実行される内容を正確に伝えます。また、エイリアス、Bash関数、およびBashビルトインでも機能します(ただし、type -pこれらは無視され、真のファイルのみが返されます)。

whichPATHで検索するだけです。これは、次の理由により異なります。

  • 同じ名前のエイリアス、関数、またはビルトインがある場合は、代わりに呼び出されます。
  • コマンドが最後にハッシュされてからPATHで以前に追加された場合、コマンドはによって検出されますがwhich、そのコマンドの実行はハッシュ値を使用します(Bashでハッシュを強制的に更新できますhash -r)。

通常、人々は「インタラクティブな使用でtypeはなく」を本当に望んでいwhichます。「実行するときに、このコマンドはどこから来るのか」を見つけるために使用するからです。which本当にPATHルックアップを行いたい場合にのみ使用してください。


command -vはと同等ですksh whence
ヘンクランゲベルド14

1
我々は持っているのでwherewhence当然にも、とのwhowhywhen?なぜないのwhatですか?
ハーゲンフォン

echo 'main(){printf("what\n");}' | sudo cc -x c - -o /usr/local/bin/what
イヴァンヴチカ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.