Kullanın type commandname
. commandname
Yü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 commandname
dö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/sh
OSF1 ≤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 ), type
her 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, $PATH
manuel 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 -p
sadece çalıştırılabilir dosyaları aramak zorundadır $PATH
. Bash'te, yerleşik veya işlevse dönüş durumunun type -p foo
0 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 -p
POSIX'te değil; örneğin Debian'ın ( /bin/sh
Ubuntu'da bulunan) külünde yoktur.