Em alguns sistemas, which -a
mostra todas as correspondências. Se o seu shell for bash ou zsh¹, você poderá 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
fazer principalmente 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, built-ins do shell, funções e comandos externos).
A única maneira totalmente portátil de exibir todas as correspondências é analisar a $PATH
si mesmo. Aqui está um script de shell que faz isso. Se você transformá-la em uma função shell, coloque o corpo da função entre parênteses (para que a mudança para IFS
e set -f
não escape da função) e mude 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 só imprima a primeira correspondência quando eu tento.
which --all
.