私は読んだ「どれ」、しかしすべてしかし、私はその違いを本当に理解することはできません。私は64ビットdebian-busterでzsh 5.4.2を実行しています。 whichとwhenceはどちらもシェル組み込み関数です。
人々はどこでどちらがより適切であるか、その逆であるかを指摘できますか?
/home/shirish> zsh --version
zsh 5.4.2 (x86_64-debian-linux-gnu)
/home/shirish> type -a which
which is a shell builtin
which is /usr/bin/which
which is /bin/which
/home/shirish> type -a whence
whence is a shell builtin
答え1
which
cshコマンド(csh
あなたのコマンドを読むスクリプト~/.cshrc
)、sに対するwhence
Kornシェルcsh
の応答which
、type
Bourneシェルコマンド、command -v/V
POSIXコマンド...
zsh
ksh
いくつかの拡張を実装しましたが、csh常習者とPOSIX準拠のためのエイリアスwhence
も提供しました。これは同じコマンドですが、デフォルトの動作は異なります。which
type
command -v/V
which
)のwhence -c
ためc
ですcsh
type
はいwhence -v
(詳細はwhence
)where
はいwhence -ca
- POSIXは
command -v
次のとおりです。whence
- POSIXは
command -V
次のとおりです。whence -v
詳細は以下で確認できます(少し混乱はありますが申し訳ありません)。「which」を使わないのはなぜですか?それでは何を使うべきですか?
答え2
[-vcfpam]名前はどこから来たのですか...
各名前に対してコマンド名として使用される場合、どのように解釈されるかを表示します。この-v
フラグはより詳細なレポートを生成します。この-c
フラグはcshに似た形式で結果を印刷します-v
。この-f
フラグを使用すると、シェル関数の内容が表示されますが、-c
このフラグを使用しないと発生しません。この-p
フラグは、別名、予約語、シェル関数、または組み込み関数であっても、名前のパス検索を実行します。この-a
フラグは、コマンド・パス全体でその名前がすべて検索されます。この-m
フラグを使用すると、引数はパターンとして処理され(引用符で囲む必要があります)、これらのパターンのいずれかに一致する各コマンドに関する情報が表示されます。
ここで[-pam]の名前... -c と同じです。
確認する必要がありますzsh マニュアル