¿Cómo puedo comprobar si existe un comando en un script de Shell? [duplicar]

Resuelto Andrew asked hace 12 años • 8 respuestas

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
Andrew avatar Sep 23 '11 06:09 Andrew
Aceptado

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 typeno 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
Ivan Tarasov avatar Sep 22 '2011 23:09 Ivan Tarasov

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 ifclá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.

xuhdev avatar Oct 11 '2016 17:10 xuhdev