Comprobar si existe un comando en Bash
- 
          
            Use el comando command -vpara verificar si existe un comando en Bash
- 
          
            Use el comando tipopara verificar si existe un comando en Bash
- 
          
            Use el comando hashpara verificar si existe un comando en Bash
- 
          
            Use el comando testpara verificar 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.
- -b ARCHIVO-- Truesi el archivo es un archivo de bloque especial.
- -c ARCHIVO-- Truesi el archivo es un archivo de caracteres especiales.
- -d ARCHIVO-- Truesi es un directorio.
- -e ARCHIVO-- Truesi es un archivo, independientemente del tipo.
- -f ARCHIVO-- Truesolo si es un archivo normal (por ejemplo, no un directorio o dispositivo).
- -G ARCHIVO-- Truesi el archivo tiene el mismo grupo que el usuario que ejecuta el comando.
- -h ARCHIVO-- Truesi es un enlace simbólico.
- -g ARCHIVO-- Truesi tiene establecido el indicador- set-group-id(- sgid).
- -k ARCHIVO-- Truesi tiene establecido un indicador de bits fijos.
- -L ARCHIVO-- Truesi es un enlace simbólico.
- -O FILE-- Truesi es propiedad del usuario que ejecuta el comando.
- -p ARCHIVO-- Truesi es un tubo.
- -r ARCHIVO-- Truesi es legible.
- -S FILE-- Truesi es un socket.
- -s FILE-- Truesi tiene algún tamaño distinto de cero.
- -u FILE-- Truesi el indicador- set-user-id(- suid) está activado.
- -w ARCHIVO-- Truesi es escribible.
- -x ARCHIVO-- Truesi 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.