「どれ」、しかしすべて

「どれ」、しかしすべて

おそらく、ほとんどの人がこのwhichコマンドに精通しているでしょう、そして私もかなり頻繁に使用します。私のパスでは、どのコマンドが最初のものであるかだけでなく、どのくらいのコマンドがあり、どこにいるのか疑問に思う状況に直面しました。みんなパス内のすべてのコマンドは次のとおりです。どのマニュアルページを試してみましたが(この言葉を入力するとman which笑いになります)、何も見られませんでした。

ベストアンサー1

一部のシステムではwhich -aすべての一致を表示します。シェルがbashまたはzsh1の場合は、次のものを使用できますtypetype foo最初の一致項目の表示とtype -a fooすべての一致項目の表示。これら3つのコマンドはほとんど同じことをtype行います。シェルとオペレーティングシステムの違いは、可用性、オプション、およびレポートの内容です。常に使用可能で、すべての可能なコマンドに似た名前(エイリアス、キーワード、シェル組み込み、関数、および外部コマンド)を表示します。whichwhencetype

すべての一致を表示する完全に移植可能な唯一の方法は、$PATH自分自身を解析することです。これを行うシェルスクリプトは次のとおりです。これをシェル関数にする場合は、関数本体を括弧で囲んでから(に変更すると関数がエスケープされないように)にIFS変更します。set -fexitreturn

#!/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は、試みたときにのみ最初の一致を印刷します

おすすめ記事