En algunos sistemas, which -amuestra todas las coincidencias. Si su shell es bash o zsh¹, puede usar typeen su lugar: type foomuestra la primera coincidencia y type -a foomuestra todas las coincidencias. Los tres comandos type, whichy whencehacen sobre todo lo mismo; difieren entre shells y sistemas operativos en disponibilidad, opciones y qué informan exactamente. typesiempre 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 $PATHusted 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 IFSy set -fno escapan a la función), y el cambio exita 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.