почему удар ищет энергию в/usr/bin

Я использую Ubuntu 14.04

я скомпилировал энергию и установил в/usr/local/bin

я удалил более ранние версии установленной энергии.

почему удар ищет энергию в /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
3
задан 10 August 2016 в 09:54

1 ответ

Заключение в кавычки bash руководство:

Bash использует хеш-таблицу для запоминания полных путей исполняемых файлов. Полный поиск каталогов в ПУТИ выполняется, только если команда не найдена в хеш-таблице.

Здесь, что произошло, то, что Вы:

  1. удаленный оригинал /usr/bin/vim, и
  2. созданный новое /usr/local/bin/vim.

В этом случае, bashхеш-таблица пути никогда не обновлялась, поэтому когда Вы звоните vim после 1 и 2, это находит старый хешированный путь. Для принуждения обновления хеша пути использовать hash -r.

AFAICT, bash имеет странное и недокументированное поведение, в этом:

Если Вы звоните vim между 1 и 2 (ведущий к законной "команде, не найденной"), затем, хешированный путь автоматически удален, поэтому когда Вы звоните vim снова после 2, это работает просто великолепно.

То, что я не понимаю, то, почему bash автоматически не удаляет путь когда vim назван после 1 и 2 (как в Вашем случае), и неправильный путь найден. Но это - то, что происходит.

4
ответ дан 1 December 2019 в 15:54

Другие вопросы по тегам:

Похожие вопросы: