Zastosowanie type commandname. Zwraca true, jeśli commandnamejest cokolwiek wykonywalnego: alias, funkcja, wbudowane lub zewnętrzne polecenie (sprawdzone w $PATH). Alternatywnie, użyj command commandnamezwracanej wartości true, jeśli commandnamejest to polecenie wbudowane lub zewnętrzne (wyszukiwane w $PATH).
exists () {
type "$1" >/dev/null 2>/dev/null
}
Istnieje kilka wariantów sh (zdecydowanie wcześniejszych niż POSIX; wiem o /bin/shOSF1 ≤3.x i niektórych wersjach powłoki Almquist we wczesnych wersjach NetBSD i kilku dystrybucjach Linuksa z XX wieku), w których typezawsze zwraca 0 lub nie istnieć. Nie sądzę, aby jakikolwiek system był dostarczany z tym tysiącleciem. Jeśli kiedykolwiek je spotkasz, możesz skorzystać z funkcji $PATHręcznego wyszukiwania :
exists () { (
IFS=:
for d in $PATH; do
if test -x "$d/$1"; then return 0; fi
done
return 1
) }
Ta funkcja jest ogólnie przydatna, jeśli chcesz wykluczyć wbudowane funkcje i funkcje i wyszukać nazwę w $PATH. Większość powłok ma do tego wbudowane command -v, choć jest to stosunkowo nowy dodatek do POSIX (wciąż opcjonalny od POSIX: 2004). Jest to w zasadzie wersja przyjazna dla programistów type: drukuje pełną ścieżkę do pliku wykonywalnego $PATH, samą nazwę dla funkcji wbudowanej lub funkcji oraz definicję aliasu dla aliasu.
exists_in_path () {
case $(command -v -- "$1") in
/*) return 0;;
alias\ *) return 1;; # alias
*) return 1;; # built-in or function
esac
}
Ksh, bash i zsh również muszą type -pwyszukiwać tylko pliki wykonywalne $PATH. Zauważ, że w bash, zwracanym statusem type -p foojest 0, jeśli foojest wbudowaną funkcją lub; jeśli chcesz przetestować plik wykonywalny w $PATH, musisz sprawdzić, czy dane wyjściowe nie są puste. type -pnie ma w POSIX; na przykład jesion Debiana (który jest /bin/shna Ubuntu) go nie ma.