Gunakan type commandname. Ini mengembalikan true jika commandnameada sesuatu yang dapat dieksekusi: alias, fungsi, built-in atau perintah eksternal (melihat ke atas $PATH). Atau, gunakan command commandnameyang mengembalikan true jika commandnameadalah perintah bawaan atau eksternal (lihat ke atas $PATH).
exists () {
type "$1" >/dev/null 2>/dev/null
}
Ada beberapa varian sh (pasti pra-POSIX; Saya tahu di /bin/shbawah OSF1 ≤3.x dan beberapa versi shell Almquist ditemukan di versi NetBSD awal dan beberapa distribusi Linux abad ke-20) di mana typeselalu mengembalikan 0 atau tidak ada. Saya tidak berpikir ada sistem yang dikirim dengan milenium ini. Jika Anda pernah menjumpainya, berikut adalah fungsi yang dapat Anda gunakan untuk mencari $PATHsecara manual:
exists () { (
IFS=:
for d in $PATH; do
if test -x "$d/$1"; then return 0; fi
done
return 1
) }
Fungsi ini umumnya berguna jika Anda ingin mengecualikan built-in dan fungsi dan mencari nama di $PATH. Sebagian besar shell memiliki built-in untuk ini, command -vmeskipun ini merupakan tambahan yang relatif baru untuk POSIX (masih opsional pada POSIX: 2004). Ini pada dasarnya versi ramah-programmer type: ia mencetak path lengkap untuk dieksekusi di $PATH, nama telanjang untuk built-in atau fungsi, dan definisi alias untuk alias.
exists_in_path () {
case $(command -v -- "$1") in
/*) return 0;;
alias\ *) return 1;; # alias
*) return 1;; # built-in or function
esac
}
Ksh, bash dan zsh juga harus type -pmencari yang hanya dapat dieksekusi di $PATH. Perhatikan bahwa dalam bash, status pengembalian type -p fooadalah 0 jika foomerupakan built-in atau fungsi; Jika Anda ingin menguji untuk dieksekusi di $PATH, Anda perlu memeriksa bahwa output tidak kosong. type -ptidak dalam POSIX; misalnya abu Debian (yang ada /bin/shdi Ubuntu) tidak memilikinya.