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.