Uso type commandname
. Esto devuelve verdadero si commandname
hay algo ejecutable: alias, función, comando incorporado o externo (buscado en $PATH
). Alternativamente, use command commandname
which return true si commandname
es 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/sh
bajo 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 type
siempre 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 $PATH
manualmente:
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 -v
aunque 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 -p
que buscar solo ejecutables en $PATH
. Tenga en cuenta que en bash, el estado de retorno de type -p foo
es 0 si foo
es una función o incorporada; si desea probar un archivo ejecutable $PATH
, debe verificar que la salida no esté vacía. type -p
no está en POSIX; por ejemplo, la ceniza de Debian (que está /bin/sh
en Ubuntu) no la tiene.