Uso type commandname. Esto devuelve verdadero si commandnamehay algo ejecutable: alias, función, comando incorporado o externo (buscado en $PATH). Alternativamente, use command commandnamewhich return true si commandnamees un comando incorporado o externo (buscado en $PATH).
exists () {
type "$1" >/dev/null 2>/dev/null
}
Hay algunas variantes sh (definitivamente pre-POSIX; conozco /bin/shbajo OSF1 ≤3.xy algunas versiones del shell Almquist que se encuentran en las primeras versiones de NetBSD y algunas distribuciones Linux del siglo XX) donde typesiempre devuelve 0 o no existe. No creo que haya ningún sistema enviado con estos este milenio. Si alguna vez los encuentra, aquí hay una función que puede usar para buscar $PATHmanualmente:
exists () { (
IFS=:
for d in $PATH; do
if test -x "$d/$1"; then return 0; fi
done
return 1
) }
Esta función es generalmente útil si desea excluir funciones y funciones incorporadas y buscar el nombre $PATH. La mayoría de los shells tienen una función incorporada para esto, command -vaunque es una adición relativamente reciente a POSIX (todavía opcional a partir de POSIX: 2004). Básicamente es una versión amigable para el programador type: imprime la ruta completa para un ejecutable $PATH, el nombre para una función o función incorporada y una definición de alias para un alias.
exists_in_path () {
case $(command -v -- "$1") in
/*) return 0;;
alias\ *) return 1;; # alias
*) return 1;; # built-in or function
esac
}
Ksh, bash y zsh también tienen type -pque buscar solo ejecutables en $PATH. Tenga en cuenta que en bash, el estado de retorno de type -p fooes 0 si fooes una función o incorporada; si desea probar un archivo ejecutable $PATH, debe verificar que la salida no esté vacía. type -pno está en POSIX; por ejemplo, la ceniza de Debian (que está /bin/shen Ubuntu) no la tiene.