Uso de which para encontrar el path

Hace un tiempo hablamos sobre el uso de las variables de entorno. En particular, mencionamos el propósito de PATH, la cual nos indica en cuáles directorios se deben buscar los binarios correspondientes a los comandos que tipeamos. En PATH, estos directorios se encuentran separados por comas. Para ampliar, en esta ocasión explicaremos el uso de which y su relación con PATH.

Uso de which

El comando which acepta uno o más argumentos. Para cada uno de ellos, muestra en la salida estándar la ruta completa correspondiente al archivo binario asociado. En otras palabras, which nos muestra la ubicación del archivo ejecutable de un comando dado. Para hacerlo, which busca en orden dentro de los directorios que aparecen en PATH.

En la Fig. 1 podemos observar una serie de ejemplos ilustrativos. En el primero observamos el uso de which con solamente un argumento. Por otro lado, en el segundo y en el tercero utilizamos dos y tres. Finalmente, utilizamos el comando en el proceso de asignar un valor a una variable.

# Ejemplo 1
which ls
# Ejemplo 2
which ps top
# Ejemplo 3
which whereis whatis man
# Ejemplo 4
PYTHON3=$(which python3)
echo $PATH
Uso de which para encontrar la ruta completa correspondiente a la ubicación del binario
Figura 1 – Uso de which para encontrar la ruta completa correspondiente a la ubicación del binario

Otros detalles

Dos detalles interesantes sobre el uso de which son los siguientes:

  • Una vez que se identifica un binario dado en un directorio incluido en PATH, la búsqueda se detiene a menos que se utilice la opción -a. En ese caso se buscará en TODOS los directorios en vez de finalizar con la primera ocurrencia.
  • Si uno o más de los argumentos no se encuentra en PATH, which regresa un exit status de 1. Si todos se encuentran, el exit status será igual a 0, mientras que será igual a 2 si se especifica una opción no válida.

Espero que este post les haya resultado de utilidad. ¡No olviden suscribirse al blog para no perderse detalle de próximas publicaciones!