私はこんなところから来た「which」を使わないのはなぜですか?それでは何を使うべきですか?そしてhttps://stackoverflow.com/questions/592620/how-to-check-if-a-program-exists-from-a-bash-scriptwhich
私自身は、よく知られているすべての理由でこれに反対することを長い間提案してきました。しかし、それは難しい戦いのように見えます。
人々にこの命令を放棄させるのはなぜそんなに難しいのですかwhich
?
最初に反対と懐疑論に直面した他の多くのPOSIXイノベーションは、時間の経過とともに一般的なU * x仕様の一部になりましたが、これは現場での採用が非常に不安定なイノベーションであるようです。
なぜ人々がこの特定のPOSIXの推奨事項を覚えているのが難しいのかを理解したいと思います。 POSIXの立場がまだ不安定なのではないか(まずtype
、今command
)?それともPOSIX名がcommand
覚えたり内部化するのが難しいからですか? (BashがPOSIX以前にも存在していたかどうか疑問に思うかもしれません。多分command
意味が少し異なるかもしれません)。which
答え1
command -v
直接的な交換ではないからですwhich
。
https://github.com/koalaman/shellcheck/issues/1162
which
- フルパスを出力し、
- シェルの組み込みや機能を無視し、
- すべて存在する場合にのみtrueを返します。
- エイリアスの代わりに出力する
- ダッシュとは異なり
type -p
- ほとんどのコンピュータは約5種類のBash / Linuxバージョンを使用しているため、互換性のない実装はほとんどありません。
答え2
@user1133275の回答や関連コメントに加えて、使用中かどうかwhich
はtype
常にわかりません。個人的に私の指はそれを使用するように訓練されており、which
コマンド名は覚えやすく直感的であると思います。しかし、実際には以下を使用していますtype
。
$ which which
$ which type
$ type type
type is a shell builtin
$ type which
which is a function
which ()
{
type -path ${1+"$@"}
}
明日誰かより良いコマンドが出たら、私はそれを変更して.profile
私のカスタムコマンドを使い続けますwhich
。
一言で言えば、名前が機能と密接に関連しているので、根絶が難しいと思います。