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
type cd
cd はシェル組み込み関数です
# こんなのも
type [
[ はシェル組み込み関数です
-t
オプションだとbuiltin
と出力。
type -t cd
builtin
type gpg
gpg は /usr/bin/gpg です
-t
オプションだとfile
と出力。
type -t gpg
file
type date
date は /usr/bin/date です
# 一回使うと、
date
# Hashされている
type date
date はハッシュされています (/usr/bin/date)
ハッシュされていても、-t
オプションだとfile
と出力。
type -t date
file
type ls
ls は `ls --color=auto' のエイリアスです
ちなみにこの出力が`
(バッククォート)と'
(シングルクォート)で囲まれているのがちょっと嫌。
-t
オプションだとalias
と出力。
type -t ls
alias
type if
if はシェルの予約語です
-t
オプションだとkeyword
と出力。
type -t if
keyword
まず、下記のようにhelloという名のFunction(関数)を作成する。そのまま端末に打ち込むだけ。ファイルに書いてsource
コマンドで読み込んでもよい。
hello(){ echo こんにちは; }
これでhelloコマンド(関数)として実行できる。
hello
こんにちは
関数に対してtype
コマンドをやると、
type hello
hello は関数です
hello ()
{
echo こんにちは
}
-t
オプションだとfunction
と出力。
type -t hello
function
type -t
でfileとなるものについては、ファイルパスを表示するが、それ以外は何も表示しない。つまり、外部コマンドとHashは表示されるが、エイリアスは表示されない。
# 外部コマンド
type -p gpg
/usr/bin/gpg
# ハッシュされている例
date
type -p date
/usr/bin/date
# エイリアスの例
type -p ls
こちらはエイリアスの場合もファイルパス表示。
type -P ls
/usr/bin/ls
-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 です