Binário em / usr / local / bin

3

Eu olho para ver onde o comando está localizado:

xxx:~/mono/mono-2.6.7$ which mono
/usr/local/bin/mono

Se eu executar diretamente, não há problema:

xxx:~/mono/mono-2.6.7$ /usr/local/bin/mono -V
Mono JIT compiler version 2.6.7 (tarball Mon Aug  2 16:01:50 UTC 2010)
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
....

Mas se eu executar o comando sem o caminho, ele não poderá encontrá-lo:

xxx:~/mono/mono-2.6.7$ mono
bash: /usr/bin/mono: No such file or directory

Não existe um arquivo mono em / usr / bin:

xxx:~/mono/mono-2.6.7$ ls -l /usr/bin/mono
ls: cannot access /usr/bin/mono: No such file or directory

Aqui está o meu caminho:

xxx:~/mono/mono-2.6.7$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Não pesquisa cada diretório separado pelos dois pontos? Então não deveria encontrar mono em / usr / local / bin?

Se eu fizer login como root, isso funciona. Eu posso executar o mono na linha de comando e encontrá-lo. As permissões são:

xxx:~/mono/mono-2.6.7$ ls -l /usr/local/bin/mono
-rwxr-xr-x 1 root root 8452592 2010-08-02 16:23 /usr/local/bin/mono

O usuário que eu estou usando não faz parte do grupo certo?

    
por Simon Sheehan 02.08.2010 / 18:42

3 respostas

7

O Bash mantém um cache de locais de comando na memória, para que não precise fazer toda a exploração PATH toda vez que você iniciar um comando. Na sua sessão bash original, bash havia memorizado anteriormente que mono era /usr/bin/mono . Em seguida, você removeu /usr/bin/mono e adicionou /usr/local/bin/mono , mas seu bash em execução ainda tinha o local antigo em seu cache.

Você pode manipular o cache do local de comando com o hash builtin. Em particular hash -r limpa o cache.

which é um comando externo, portanto, ele não usa o cache do bash e executa uma consulta PATH todas as vezes. Você também pode ter usado o type , que é interno e, portanto, usa o cache de pesquisa.

    
por 02.08.2010 / 20:51
0

Talvez você tenha um alias definido para mono? Verifique os seguintes arquivos em seu diretório pessoal: .bashrc , .profile , .login ou .bash_profile

... não contém algo assim

 alias mono="/usr/bin/mono"

Isso também pode estar localizado em / etc / bashrc ou / etc / profile .

O comando alias mostra todos os aliases definidos no momento.

    
por 02.08.2010 / 18:48
0

Eu fiz o logout e, em seguida, entrei novamente e funcionou. Eu devo ter feito algo estúpido. Mas funciona!

    
por 02.08.2010 / 19:01

Tags