Gunakan type commandname
. Ini mengembalikan true jika commandname
ada sesuatu yang dapat dieksekusi: alias, fungsi, built-in atau perintah eksternal (melihat ke atas $PATH
). Atau, gunakan command commandname
yang mengembalikan true jika commandname
adalah 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/sh
bawah OSF1 ≤3.x dan beberapa versi shell Almquist ditemukan di versi NetBSD awal dan beberapa distribusi Linux abad ke-20) di mana type
selalu 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 $PATH
secara 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 -v
meskipun 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 -p
mencari yang hanya dapat dieksekusi di $PATH
. Perhatikan bahwa dalam bash, status pengembalian type -p foo
adalah 0 jika foo
merupakan built-in atau fungsi; Jika Anda ingin menguji untuk dieksekusi di $PATH
, Anda perlu memeriksa bahwa output tidak kosong. type -p
tidak dalam POSIX; misalnya abu Debian (yang ada /bin/sh
di Ubuntu) tidak memilikinya.