path – `que`, pero todos

Pregunta:

Creo que la mayoría está familiarizada con el comando which y lo uso con frecuencia. Me encontré con una situación en la que tengo curiosidad, no solo sobre qué comando es el primero en mi camino, sino cuántos y dónde están todos los comandos en todos mis caminos. Probé la página de man which (escribir man which me hizo reír), pero no vi nada.

Respuesta:

En algunos sistemas, which -a muestra todas las coincidencias. Si su shell es bash o zsh¹, puede usar type lugar: type foo muestra la primera coincidencia y type -a foo muestra todas las coincidencias. Los tres type comandos, which y de whence hacen casi lo mismo; difieren entre los shells y los sistemas operativos en cuanto a disponibilidad, opciones y qué informan exactamente. type siempre está disponible y muestra todos los posibles nombres similares a comandos (alias, palabras clave, integradas de shell, funciones y comandos externos).

La única forma totalmente portátil de mostrar todas las coincidencias es analizar $PATH usted mismo. Aquí hay un script de shell que hace esto. Si la convierte en una función de shell, asegúrese de encerrar el cuerpo de la función entre paréntesis (para que el cambio a IFS y el set -f no escapen de la función) y cambie exit para return .

#!/bin/sh
set -f       # disable globbing
IFS=:        # break words at : only
not_found=1
for d in $PATH; do
  if [ -f "$d/$x" ] && [ -x "$d/$x" ]; then
    printf '%s\n' "$d/$x"
    not_found=0
  fi
done
exit $not_found

¹ O ksh 93, según la documentación, aunque ksh 93s + 2008-01-31 solo imprime la primera coincidencia cuando lo intento.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım