por que o bash está procurando por vim em / usr / bin

2

Estou usando o Ubuntu 14.04

eu compilei o vim e instalei em / usr / local / bin

eu desinstalei as versões anteriores do vim instaladas.

por que o bash está procurando pelo vim em /usr/bin ?

vimal@Tardis:~/VIM/vim$ which -a vim
/usr/local/bin/vim
vimal@Tardis:~/VIM/vim$ vim
bash: /usr/bin/vim: No such file or directory

vimal@Tardis:~/VIM/vim$ ls -al /usr/local/bin/
total 3216
drwxr-xr-x  2 root root    4096 Aug 10 11:39 .
drwxr-xr-x 11 root root    4096 Aug  9 11:51 ..
-rwxr-xr-x  1 root root  972502 Aug  9 12:33 ctags
lrwxrwxrwx  1 root root       3 Aug  9 22:24 ex -> vim
lrwxrwxrwx  1 root root       3 Aug  9 22:24 rview -> vim
lrwxrwxrwx  1 root root       3 Aug  9 22:24 rvim -> vim
lrwxrwxrwx  1 root root       3 Aug  9 22:24 view -> vim
-rwxr-xr-x  1 root root 2284512 Aug 10 11:39 vim
lrwxrwxrwx  1 root root       3 Aug  9 22:24 vimdiff -> vim
-rwxr-xr-x  1 root root    2084 Aug 10 11:39 vimtutor
-rwxr-xr-x  1 root root   18896 Aug 10 11:39 xxd
vimal@Tardis:~/VIM/vim$ id
uid=1001(vimal) gid=1001(vimal) groups=1001(vimal),4(adm),27(sudo),108(lpadmin),124(sambashare)
vimal@Tardis:~/VIM/vim$ echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/go/bin:/home/vimal/gowork/bin
    
por weima 10.08.2016 / 08:20

1 resposta

3

Citando o manual bash :

  

O Bash usa uma tabela de hash para lembrar os nomes completos dos arquivos executáveis. Uma pesquisa completa dos diretórios no PATH é executada somente se o comando não for encontrado na tabela de hash.

Aqui, o que aconteceu é que você:

  1. removeu o original /usr/bin/vim e
  2. criou um novo /usr/local/bin/vim .

Nesse caso, a tabela de hash do caminho de bash nunca foi atualizada, portanto, quando você chamar vim após 1 e 2, ele localizará o caminho com hash antigo. Para forçar uma atualização de hash de caminho, use hash -r .

AFAICT, bash tem um comportamento estranho e não documentado, em que:

  

Se você chamar vim entre 1 e 2 (levando a um "comando não encontrado" legítimo), então o caminho com hash é removido automaticamente , então quando você chame vim novamente depois de 2, ele funciona bem.

O que eu não entendo é por que bash não remove automaticamente o caminho quando vim é chamado após 1 e 2 (como no seu caso), e o caminho errado é encontrado. Mas é isso que está acontecendo.

    
por Matei David 10.08.2016 / 18:00