Em alguns sistemas, which -a mostra todas as correspondências. Se o seu shell é bash ou zsh¹, você pode usar type : type foo mostra a primeira correspondência e type -a foo mostra todas as correspondências. Os três comandos type , which e whence fazem basicamente a mesma coisa; eles diferem entre shells e sistemas operacionais em disponibilidade, opções e o que exatamente eles relatam. type está sempre disponível e mostra todos os nomes possíveis de comandos (aliases, palavras-chave, shell built-ins, funções e comandos externos).
A única maneira totalmente portátil de exibir todas as correspondências é analisar $PATH . Aqui está um script de shell que faz isso. Se você fizer uma função de shell, coloque o corpo da função entre parênteses (para que a alteração para IFS e set -f não escape da função) e altere 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
Ou ksh 93, de acordo com a documentação, embora o ksh 93s + 2008-01-31 imprima apenas o primeiro jogo quando eu tento.