typeコマンド

typeコマンドは、コマンドの存在確認、コマンドのタイプ・ファイルパスの表示をする。

公式ドキュメント


typeコマンド概要

typeコマンドはBash Builtin(組み込みコマンド)であり、以下を調査できる。


コマンド名がどのように解釈されるか調査

ある文字列をBashにコマンドとして渡したとき、それがどのように解釈されるか、typeコマンドで調査できる。

-tオプションでコマンドのタイプだけ表示。


コマンドの存在確認

コマンドが存在するかどうか調べたいが、存在する場合は実行はしたくない、という時に。

type xyz
bash: type: xyz: 見つかりません
echo $?
1

-tオプションだと出力なし。

type -t xyz
echo $?
1

シェルスクリプト例

下記だと予約語でも存在するになっちゃうけど。

command='xyz'
if type $command >/dev/null 2>&1; then
  echo "存在する" 
else
  echo "存在しない"
fi

Builtin(組み込みコマンド)の例

type cd
cd はシェル組み込み関数です

# こんなのも
type [
[ はシェル組み込み関数です

-tオプションだとbuiltinと出力。

type -t cd
builtin

外部コマンドの例

type gpg
gpg は /usr/bin/gpg です

-tオプションだとfileと出力。

type -t gpg
file

Hash(一時的に記憶)の例

type date
date は /usr/bin/date です
# 一回使うと、
date
# Hashされている
type date
date はハッシュされています (/usr/bin/date)

ハッシュされていても、-tオプションだとfileと出力。

type -t date
file

Alias(別名)の例

type ls
ls は `ls --color=auto' のエイリアスです

ちなみにこの出力が`(バッククォート)と'(シングルクォート)で囲まれているのがちょっと嫌。

-tオプションだとaliasと出力。

type -t ls
alias

Keyword(予約語)の例

type if
if はシェルの予約語です

-tオプションだとkeywordと出力。

type -t if
keyword

Function(関数)の例

まず、下記のようにhelloという名のFunction(関数)を作成する。そのまま端末に打ち込むだけ。ファイルに書いてsourceコマンドで読み込んでもよい。

hello(){ echo こんにちは; }

これでhelloコマンド(関数)として実行できる。

hello
こんにちは

関数に対してtypeコマンドをやると、

type hello
hello は関数です
hello () 
{ 
    echo こんにちは
}

-tオプションだとfunctionと出力。

type -t hello
function

外部コマンドのファイルパスを表示: -p -Pオプション

-p(小文字)オプション

type -tでfileとなるものについては、ファイルパスを表示するが、それ以外は何も表示しない。つまり、外部コマンドとHashは表示されるが、エイリアスは表示されない。

# 外部コマンド
type -p gpg
/usr/bin/gpg
# ハッシュされている例
date
type -p date
/usr/bin/date
# エイリアスの例
type -p ls

-P(小文字)オプション

こちらはエイリアスの場合もファイルパス表示。

type -P ls
/usr/bin/ls

同名コマンドもすべて表示: -aオプション

-aオプションで、同名コマンドもすべて表示。

# CentOS7の例
type -a echo
echo はシェル組み込み関数です
echo は /usr/bin/echo です
echo は /bin/echo です

上記はechoという3つのコマンドがあって、単にechoと打った場合は組み込みコマンドが実行されるという意味。優先順位の低い外部コマンドを実行したければ、フルパスで/bin/echoなどと実行すればよい。

エイリアスの場合、

type -a ls
ls は `ls --color=auto' のエイリアスです
ls は /usr/bin/ls です
ls は /bin/ls です