Comprobar si existe un comando en Bash

Faiq Bilal 20 junio 2023
  1. Use el comando command -v para verificar si existe un comando en Bash
  2. Use el comando tipo para verificar si existe un comando en Bash
  3. Use el comando hash para verificar si existe un comando en Bash
  4. Use el comando test para verificar si existe un comando en Bash
Comprobar si existe un comando en Bash

Es posible que sea necesario validar si existe un comando, programa o archivo utilizando Bash Scripting o programación. Este artículo enumerará múltiples métodos para satisfacer esa necesidad.

Podemos usar diferentes comandos incorporados en Bash que nos permiten verificar si existe o no un comando. El uso de estos comandos se demuestra a continuación.

Use el comando command -v para verificar si existe un comando en Bash

El comando -v es una función integrada en todos los sistemas POSIX y Bash. Esta función comprueba si existe un comando, ya que devuelve la ruta válida para ese comando si existe y devuelve NULL si no existe.

Por ejemplo:

command -v ls

Producción :

/bin/ls

El comando -v también se puede usar de forma segura en scripts de Bash para verificar la existencia de un comando con condiciones if, que se demuestra a continuación.

if ! [ -x "$(command -v npm)" ]; then
  echo 'Error: npm is not installed.' >&2
  exit 1
fi

El código anterior verificará si npm está instalado, es decir, existe dentro del directorio del usuario y si es ejecutable. Si no se encuentra npm en Ruta, el código anterior generará una excepción y terminará.

La plantilla anterior se puede usar para verificar la existencia de cualquier programa/comando/utilidad usando el nombre de ese programa/comando/utilidad.

Use el comando tipo para verificar si existe un comando en Bash

El comando tipo es un comando incorporado muy útil que proporciona información sobre la entidad que utiliza. Se puede usar con comandos, archivos, palabras clave, shell integrado, etc.

El uso del comando tipo se muestra a continuación.

type command

Producción :

command is a shell builtin

Más específicamente, para nuestro caso de uso, podemos usar el comando tipo con la opción -p para obtener la ruta de un archivo o ejecutable. El uso de esto se demuestra a continuación.

type -p npm

Producción :

/usr/local/bin/npm

Desde que se instaló npm en nuestro sistema, type -p ha devuelto su ruta válida. Es importante tener en cuenta que si el comando tipo (sin banderas) se usa con una entidad que no existe, generará un error; sin embargo, escribir -p en el mismo caso devolverá NULL en su lugar.

Este comportamiento se demuestra a continuación.

type yarn

Producción :

bash: type: yarn: not found

Se devuelve un error porque yarn no está instalado en nuestro sistema. Sin embargo, type -p yarn no devuelve ningún resultado; dependiendo de cómo y por qué se necesita verificar la existencia de un programa, el indicador -p se puede usar u omitir.

Use el comando hash para verificar si existe un comando en Bash

El comando hash funciona de manera similar al comando tipo. Sin embargo, sale con éxito si no se encuentra el comando.

Además, tiene el beneficio adicional de codificar el comando consultado, lo que resulta en una búsqueda más rápida.

La sintaxis del comando es la siguiente.

hash -t ls

En este caso, el comando de consultas es ls. Dependiendo de su sistema, la salida será similar a la siguiente.

/usr/bin/ls

Esta es la ubicación del archivo que se ejecuta cuando se llama al comando. Si no se encuentra el comando, por ejemplo, cuando la consulta es algo así como: hash -t nada, el resultado será como el siguiente.

bash: hash: nothing: not found

El resultado es descriptivo cuando se encuentra el comando y brinda el beneficio adicional de codificar el comando para una búsqueda más rápida la próxima vez.

Use el comando test para verificar si existe un comando en Bash

test es un comando de shell incorporado que se usa principalmente para comparaciones y declaraciones condicionales; también se puede utilizar para comprobar la existencia de archivos y directorios; es importante tener en cuenta que test solo funciona si se proporciona la ruta completa y válida del archivo o directorio que desea verificar.

Hay muchos indicadores de opciones con el comando test que se relacionan con archivos y directorios, y a continuación se muestra una lista de estos indicadores de opciones.

Cabe señalar que estos indicadores solo devuelven true si el archivo existe y se cumple la condición especial. A continuación, puede encontrar las condiciones especiales enumeradas.

  1. -b ARCHIVO - True si el archivo es un archivo de bloque especial.
  2. -c ARCHIVO - True si el archivo es un archivo de caracteres especiales.
  3. -d ARCHIVO - True si es un directorio.
  4. -e ARCHIVO - True si es un archivo, independientemente del tipo.
  5. -f ARCHIVO - True solo si es un archivo normal (por ejemplo, no un directorio o dispositivo).
  6. -G ARCHIVO - True si el archivo tiene el mismo grupo que el usuario que ejecuta el comando.
  7. -h ARCHIVO - True si es un enlace simbólico.
  8. -g ARCHIVO - True si tiene establecido el indicador set-group-id (sgid).
  9. -k ARCHIVO - True si tiene establecido un indicador de bits fijos.
  10. -L ARCHIVO - True si es un enlace simbólico.
  11. -O FILE - True si es propiedad del usuario que ejecuta el comando.
  12. -p ARCHIVO - True si es un tubo.
  13. -r ARCHIVO - True si es legible.
  14. -S FILE - True si es un socket.
  15. -s FILE - True si tiene algún tamaño distinto de cero.
  16. -u FILE - True si el indicador set-user-id (suid) está activado.
  17. -w ARCHIVO - True si es escribible.
  18. -x ARCHIVO - True si es ejecutable.

En este ejemplo, ARCHIVO denota la ruta completa y válida de un archivo que el usuario desea verificar.

A continuación se muestra el uso de una prueba para comprobar la existencia de un archivo.

test -e etc/random.txt && echo "FILE exists."

La declaración del código anterior verificará la existencia del archivo etc/random.txt y generará FILE existe si la declaración de prueba devuelve true.

Artículo relacionado - Bash Command