it-swarm.com.de

Warum sucht bash in / usr / bin nach vim?

Ich benutze Ubuntu 14.04

ich habe vim kompiliert und in/usr/local/bin installiert

ich habe die früheren Versionen von vim deinstalliert.

warum sucht bash in /usr/bin nach vim?

[email protected]:~/VIM/vim$ which -a vim
/usr/local/bin/vim
[email protected]:~/VIM/vim$ vim
bash: /usr/bin/vim: No such file or directory

[email protected]:~/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
[email protected]:~/VIM/vim$ id
uid=1001(vimal) gid=1001(vimal) groups=1001(vimal),4(adm),27(Sudo),108(lpadmin),124(sambashare)
[email protected]:~/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
3
weima

Zitieren des bash Handbuchs:

Bash verwendet eine Hash-Tabelle, um sich die vollständigen Pfadnamen der ausführbaren Dateien zu merken. Eine vollständige Suche in den Verzeichnissen in PATH wird nur durchgeführt, wenn der Befehl nicht in der Hash-Tabelle gefunden wird.

Hier, was ist passiert, dass Sie:

  1. entfernte den ursprünglichen /usr/bin/vim und
  2. hat einen neuen /usr/local/bin/vim erstellt.

In diesem Fall wurde die Pfad-Hash-Tabelle von bash nie aktualisiert. Wenn Sie also vim nach 1 und 2 aufrufen, wird der alte Hash-Pfad gefunden. Verwenden Sie hash -r, um eine Pfad-Hash-Aktualisierung zu erzwingen.

AFAICT, bash hat ein seltsames und nicht dokumentiertes Verhalten, in dem:

Wenn Sie vimzwischen 1 und 2 aufrufen (was zu einem legitimen "Befehl nicht gefunden" führt), lautet der gehashte Pfad automatisch entfernt, wenn Sie also aufrufen vim nach 2 funktioniert es wieder einwandfrei.

Was ich nicht verstehe, ist, warum bash den Pfad nicht automatisch entfernt, wenn vim nach 1 und 2 aufgerufen wird (wie in Ihrem Fall) und der falsche Pfad gefunden wird. Aber genau das passiert.

4
Matei David