En algunos sistemas, which -a
muestra todas las coincidencias. Si su shell es bash o zsh¹, puede usar type
en su lugar: type foo
muestra la primera coincidencia y type -a foo
muestra todas las coincidencias. Los tres comandos type
, which
y whence
hacen sobre todo lo mismo; difieren entre shells y sistemas operativos en disponibilidad, opciones y qué informan exactamente. type
siempre está disponible y muestra todos los posibles nombres similares a comandos (alias, palabras clave, funciones integradas de shell, funciones y comandos externos).
La única forma totalmente portátil de mostrar todas las coincidencias es analizarse $PATH
usted mismo. Aquí hay un script de shell que hace esto. Si usted lo hace una función de shell, asegúrese de encerrar el cuerpo de la función entre paréntesis (de modo que el cambio en IFS
y set -f
no escapan a la función), y el cambio exit
a 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.
which --all
.