A resposta rápida
Para descobrir qual cópia bash
tentará executar, use o utilitário interno bash type
. Para descobrir qual cópia de du
, por exemplo, será executada, execute:
$ type du
du is /usr/bin/du
A teoria
Quando você solicita que bash
execute algo, bash
executa duas etapas:
Primeiro, ele verifica seu cache para a localização do arquivo. Esta é uma lista de nomes executáveis e onde o arquivo foi localizado na última vez que bash
o executou.
Segundo, se o arquivo não estiver no cache, ele verifica o caminho, pesquisando cada diretório no caminho da esquerda para a direita.
Observe que a resposta depende se você executou o executável no shell atual antes de fazer a cópia. Em caso afirmativo, bash
pode ter salvo sua localização no cache e ignorará quaisquer novos locais em que possa estar depois que você fizer cópias. Se não estiver no cache, então qual arquivo é executado depende apenas da ordem dos diretórios no caminho.
Mais detalhes
Para ver o que está no cache atual do bash, execute:
$ declare -p BASH_CMDS
declare -A BASH_CMDS='([du]="/usr/bin/du" )'
O acima mostra que apenas du
estava no cache quando eu corri isso. Se eu executasse mais comandos e depois executasse novamente, haveria mais no cache.
Para ver qual é o caminho atual, execute:
$ echo $PATH
/bin:/usr/bin:/opt/bin:/usr/local/bin:/usr/X11R6/bin
O caminho é uma lista separada por dois pontos. O acima mostra cinco diretórios no caminho. Eles serão pesquisados a partir da esquerda e trabalhando à direita.
Posso definir uma preferência?
Sim, você pode alterar a ordem dos diretórios no caminho.
Como alternativa, para trabalhos interativos, você pode definir um alias. Por exemplo:
$ alias dd=/opt/bin/dd
Após o alias acima ser definido, você pode digitar dd
na linha de comando e bash
irá ignorar o cache, ignorar o PATH e executar (ou tentar executar) /opt/bin/dd
.