コマンドの実体を確認したい
シェルで実行するコマンドには、シェル自身が持つビルトインコマンド、エイリアス、PATH上の実行ファイルなど複数の種類がある。あるコマンド名が実際にはどれに該当するかを確認したい場合、typeコマンドを使う。
type でコマンドの種類を確認する
typeにコマンド名を渡すと、そのコマンドの種類と実体を表示する。
シェルのビルトインコマンドの場合は以下のように表示される。
$ type cd
cd is a shell builtin
エイリアスの場合は、展開後の内容も合わせて表示される。
$ alias ll="ls -la"
$ type ll
ll is aliased to `ls -la'
PATH上の実行ファイルの場合は、実際のパスを表示する。
$ type ls
ls is /usr/bin/ls
シェルの予約語(キーワード)の場合は以下のように表示される。
$ type if
if is a shell keyword
type -a で該当する全ての実体を表示する
エイリアスとPATH上の実行ファイルで同名のコマンドが存在する場合、typeだけでは優先される1つしか表示されない。-aオプションを使用すると、該当する実体を全て表示できる。
$ alias ls="ls --color=auto"
$ type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
ls is /bin/ls
エイリアスのls、/usr/bin/ls、/bin/lsのすべてが表示されている。実際にコマンドを実行すると、このうち一番上のエイリアスが優先して使われる。
type -t で種類のみを取得する
-tオプションを使用すると、種類の文言(alias、keyword、function、builtin、fileのいずれか)だけを取得できる。スクリプトの条件分岐で使う場合に便利。
$ type -t cd
builtin
$ type -t ls
alias
$ type -t if
keyword
which との違い
似たコマンドにwhichがあるが、whichはPATH上の実行ファイルしか探せず、ビルトインコマンドやエイリアス、シェル関数は判定できない。ビルトインコマンドやエイリアスも含めて判定したい場合はtypeを使うとよい。
\第一線のプログラマーの行動原理を学べる!/
