2013-05-16 1 views
3

Скажем, у меня есть следующая структура:Баш в `which` показывает неправильное приложение путь

/usr/bin/app 
/home/me/bin/app 

И $/usr/bin/app --version ->v1, $/home/me/bin/app --version ->v2.

Так что, когда я выполнить какую-либо команду, скажем $app --version, он возвращает v1, но мой $which app дает мне /home/me/bin/app, так, как я думаю, он должен выполнить второе приложение и вернуть v2. Почему это не происходит?

Иными словами, строится ли $app эквивалентно $$(which app) и по какой причине оно не применяется?

+1

Попробуйте удалить приложение с помощью 'hash -d app' и добавьте свое приложение снова – ardiyu07

+0

спасибо, что работает! Предложите сделать комментарий, чтобы быть ответом, поэтому я могу «принять» его. – Necto

ответ

5

С which берет значение хэша с linux hash table, когда вы установили новый исполняемый файл с тем же именем, оболочка все еще продолжает использовать старую таблицу, поэтому возникает конфликт. Вместо использования hash -d <appname> (который работал) вы также можете использовать команду rehash, которую я считаю. (и вы также должны использовать zsh, это очень здорово :))

Смежные вопросы