回答:
エイリアスのみ、シェル関数、他のビルトインなどを完全に知ることができるのはビルトインのみであるため、シェルビルトインのみが与えられたコマンド名に対してシェルが何をするかを正しく伝えます。要確認:すべてのコマンドがそもそも実行可能ファイルに対応しているわけではありません。
Bourne Againシェルの場合bash、組み込みtypeコマンドは次のとおりです。
$ type '['
[ is a shell builtin
Fishシェルの場合fish、type組み込みはbashと同様に機能します。実行可能ファイルへのパスのみを取得するには、次を使用しますcommand -v。
$ type cat
cat is /bin/cat
$ command -v cat
/bin/cat
Kornシェルの場合ksh、ビルトインはwhenceコマンドです。type最初はの通常のエイリアスとして設定されwhence -v、commandビルトインは次の-vオプションと同等whenceです:
$ whence -v ls
ls is a tracked alias for /bin/ls
Zシェルの場合、zsh、内蔵しているwhenceと、コマンドcommandと内蔵-vのオプションと等価whenceとビルトインtype、whichおよびwhereに相当するwhenceオプションで-v、-cおよび-caそれぞれ。
$ whence ls
/bin/ls
TCシェルの場合tcsh、組み込みwhichコマンドはコマンドです。その名前の外部コマンドと混同しないでください。
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
typezshにも組み込まれていますか?
which-2.19-6.el6.x86_64は、スタートアップファイルをに置きます/etc/profile.d/which2.sh。これは、zshを含む非cshシェルによって読み取られます。それwhichはそれ自身にエイリアスします。したがって、特にzshユーザーの場合は、組み込みのbreaksをオーバーライドしますwhich。
whichこれに使用できます:
aix@aix:~$ which ls
/bin/ls
PATH引数の名前に一致する実行可能ファイルを検索することで機能します。はシェルエイリアスでは機能しないことに注意してください。
aix@aix:~$ alias listdir=/bin/ls
aix@aix:~$ listdir /
bin dev initrd.img lib32 media proc selinux tmp vmlinuz
...
aix@aix:~$ which listdir
aix@aix:~$
typeただし、機能します:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
which必ずしもそれだけでは十分ではありません。$ PATH ...で最初に見つかった名前のみを返します。その名前はシンボリックリンクであり、実際のチェーン終了実行可能ファイルではありません。
which(必ずしも)実行可能ファイルを返しません。$ PATHで最初に一致するファイル名(またはを使用する場合は複数の類似ファイルwhich -a)を返します... 実際の実行可能ファイルは、複数のリンクから離れている場合があります。
which locate/usr/bin/locatefile $(which locate)/usr/bin/locate: symbolic link to /etc/alternatives/locate' 実際の実行可能ファイルを見つけるコマンドはreadlink -e、
(と組み合わせてwhich)
readlink -e $(which locate)/usr/bin/mlocate すべての中間リンクを表示するには:
f="$(which locate)" # find name in $PATH
printf "# %s\n" "$f"
while f="$(readlink "$f")" ;do # follow links to executable
printf "# %s\n" "$f"
done
# /usr/bin/locate
# /etc/alternatives/locate
# /usr/bin/mlocate