¿Cómo puedo comprobar si existe un comando en un script de Shell? [duplicar]
Estoy escribiendo mi primer script de shell. En mi script me gustaría comprobar si existe un determinado comando y, en caso contrario, instalar el ejecutable. ¿Cómo comprobaría si este comando existe?
if # Check that foobar command doesnt exist
then
# Now install foobar
fi
En general, eso depende de tu shell, pero si usas bash, zsh, ksh o sh (según lo proporcionado por dash), lo siguiente debería funcionar:
if ! type "$foobar_command_name" > /dev/null; then
# install foobar here
fi
Para un script de instalación real, probablemente querrás asegurarte de que type
no regrese correctamente en el caso de que haya un alias foobar
. En bash podrías hacer algo como esto:
if ! foobar_loc="$(type -p "$foobar_command_name")" || [[ -z $foobar_loc ]]; then
# install foobar here
fi
Cinco formas, 4 para bash y 1 adición para zsh:
type foobar &> /dev/null
hash foobar &> /dev/null
command -v foobar &> /dev/null
which foobar &> /dev/null
(( $+commands[foobar] ))
(solo zsh)
Puedes poner cualquiera de ellos en tu if
cláusula. Según mis pruebas ( https://www.topbug.net/blog/2016/10/11/speed-test-check-the-existence-of-a-command-in-bash-and-zsh/ ), el Se recomiendan el primer y tercer método en bash y el quinto método en zsh en términos de velocidad.