コマンドの詳細を出力する

source addwhich.sh commandname
引数に指定されたコマンドが、エイリアス、キーワード、関数、組み込みコマンド、ファイル
のどれにあたるか出力する。
pasteコマンドは複数のファイルを同じ行ごとに結合するコマンド、2つのtypeコマンドを結合する。
()はプロセス置き換えで、()内のコマンドの結果がファイルとして実行される。

#!/usr/bin/bash
alltypelists=`mktemp alltypelists.XXXXXXXXXXXX`
paste <(type -ta $1) <(type -a $1) > $alltypelists 2> /dev/null
if ! [ -s $alltypelists ]; then
    echo "$1 No Match"
else 
    IFS_DEF=$IFS 
    IFS=" 
" 
    for typelist in `cat $alltypelists`; do
        typename=`echo $typelist | cut -f1`
        case $typename in
            alias)      echo "$1 is alias"
                        alias $1;;
            keyword)    echo "$1 is keyword";;
            function)   echo "$1 is function"
                        typeset -f $1;;
            builtin)    echo "$1 is builtin command";;
            file)       filename=`expr $typelist : '.* \(.*\)$'`
                        if [ -e $filename ]; then
                            echo "$1 is $filename"
                        fi  
                        ;;
         esac
    done 
    IFS=$IFS_DEF
fi  
rm -f $alltypelists