を使用しtype commandnameます。commandnameエイリアス、関数、組み込みコマンドまたは外部コマンド(で検索$PATH)が実行可能であれば、これはtrueを返します。または、組み込みコマンドまたは外部コマンド(で検索)のcommand commandname場合にtrueを返すuse を使用します。commandname$PATH
exists () {
type "$1" >/dev/null 2>/dev/null
}
常に0を返す、または返さないshバリアントがいくつかあります(POSIXより前/bin/sh、OSF1≤3.x の下、およびNetBSDの初期バージョンといくつかの20世紀のLinuxディストリビューションにあるAlmquistシェルのバージョンを知ってtypeいます)。存在します。これらのミレニアムとともに出荷されたシステムはないと思います。それらに遭遇した場合、$PATH手動で検索するために使用できる機能は次のとおりです。
exists () { (
IFS=:
for d in $PATH; do
if test -x "$d/$1"; then return 0; fi
done
return 1
) }
この関数は、組み込み関数および関数を除外して、で名前を検索する場合に一般的に役立ちます$PATH。ほとんどのシェルにはこれが組み込まれていますが、command -vPOSIXへの比較的最近の追加機能です(POSIX:2004ではオプションです)。これは基本的にプログラマ向けのバージョンですtype。実行可能ファイルのフルパス$PATH、組み込み関数または関数の裸の名前、およびエイリアスのエイリアス定義を出力します。
exists_in_path () {
case $(command -v -- "$1") in
/*) return 0;;
alias\ *) return 1;; # alias
*) return 1;; # built-in or function
esac
}
Ksh、bash、およびzshも、type -pで実行可能ファイルのみを検索する必要があります$PATH。bashでは、組み込みまたは関数のtype -p foo場合の戻りステータスは0ですfoo。で実行可能ファイルをテスト$PATHする場合は、出力が空でないことを確認する必要があります。type -pPOSIXにはありません。たとえば、Debianの灰(/bin/shUbuntuにあります)にはありません。