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