おそらく、ほとんどの人がこのwhich
コマンドに精通しているでしょう、そして私もかなり頻繁に使用します。私のパスでは、どのコマンドが最初のものであるかだけでなく、どのくらいのコマンドがあり、どこにいるのか疑問に思う状況に直面しました。みんなパス内のすべてのコマンドは次のとおりです。どのマニュアルページを試してみましたが(この言葉を入力するとman which
笑いになります)、何も見られませんでした。
ベストアンサー1
一部のシステムではwhich -a
すべての一致を表示します。シェルがbashまたはzsh1の場合は、次のものを使用できますtype
。type foo
最初の一致項目の表示とtype -a foo
すべての一致項目の表示。これら3つのコマンドはほとんど同じことをtype
行います。シェルとオペレーティングシステムの違いは、可用性、オプション、およびレポートの内容です。常に使用可能で、すべての可能なコマンドに似た名前(エイリアス、キーワード、シェル組み込み、関数、および外部コマンド)を表示します。which
whence
type
すべての一致を表示する完全に移植可能な唯一の方法は、$PATH
自分自身を解析することです。これを行うシェルスクリプトは次のとおりです。これをシェル関数にする場合は、関数本体を括弧で囲んでから(に変更すると関数がエスケープされないように)にIFS
変更します。set -f
exit
return
#!/bin/sh
set -f # disable globbing
IFS=: # break words at : only
not_found=1
for d in $PATH; do
if [ -f "$d/$x" ] && [ -x "$d/$x" ]; then
printf '%s\n' "$d/$x"
not_found=0
fi
done
exit $not_found
または、ドキュメントによると、ksh 93ですが、ksh 93s + 2008-01-31は、試みたときにのみ最初の一致を印刷します 。