Kullanın type commandname. commandnameYürütülebilir herhangi bir şey varsa bu true değerini döndürür : diğer ad, işlev, yerleşik veya harici komut (yukarıya bakıldığında $PATH). Alternatif olarak, yerleşik veya harici bir komutsa ( command commandnamedöndürülen) true değerini döndüren kullanın .commandname$PATH
exists () {
type "$1" >/dev/null 2>/dev/null
}
Birkaç sh varyantı vardır (kesinlikle POSIX öncesi; /bin/shOSF1 ≤3.x altında ve erken NetBSD sürümlerinde ve birkaç 20. yüzyıl Linux dağıtımlarında bulunan Almquist kabuğunun bazı sürümlerini biliyorum ), typeher zaman 0 döndürür veya vermez var olmak. Bu binyıl ile birlikte gelen hiçbir sistemin olduğunu düşünmüyorum. Onlarla hiç karşılaşırsanız, $PATHmanuel olarak aramak için kullanabileceğiniz bir işlev şunlardır:
exists () { (
IFS=:
for d in $PATH; do
if test -x "$d/$1"; then return 0; fi
done
return 1
) }
Bu işlev genellikle yerleşikleri ve işlevleri hariç tutmak ve içindeki adı aramak istiyorsanız kullanışlıdır $PATH. Çoğu mermi bunun için yerleşiktir command -v, ancak POSIX'e nispeten yeni bir eklentidir (POSIX: 2004'ten itibaren hala isteğe bağlıdır). Temelde programcı dostu bir sürümdür type: içinde çalıştırılabilir dosyanın tam yolunu $PATH, yerleşik veya işlev için çıplak adı ve takma ad için bir takma ad tanımını yazdırır .
exists_in_path () {
case $(command -v -- "$1") in
/*) return 0;;
alias\ *) return 1;; # alias
*) return 1;; # built-in or function
esac
}
Ksh, bash ve zsh da type -psadece çalıştırılabilir dosyaları aramak zorundadır $PATH. Bash'te, yerleşik veya işlevse dönüş durumunun type -p foo0 olduğunu unutmayın foo; içinde bir yürütülebilir dosyayı test etmek istiyorsanız $PATH, çıktının boş olup olmadığını kontrol etmeniz gerekir. type -pPOSIX'te değil; örneğin Debian'ın ( /bin/shUbuntu'da bulunan) külünde yoktur.