1

Я думал, что понял это, но я получаю необъяснимое поведение. У меня есть эти файлы:

$ which -a kvm | xargs ls -l
lrwxrwxrwx 1 root root 18 2011-11-17 17:14 /usr/bin/kvm -> qemu-system-x86_64
lrwxrwxrwx 1 root root 18 2011-11-17 17:21 /usr/local/bin/kvm -> qemu-system-x86_64
$ which -a qemu-system-x86_64 | xargs ls -l
-rwxr-xr-x 1 root root 2535168 2011-10-04 02:44 /usr/bin/qemu-system-x86_64
-rwxr-xr-x 1 root root 3497304 2011-11-17 16:26 /usr/local/bin/qemu-system-x86_64

И это разные версии:

$ /usr/bin/kvm --version
QEMU PC emulator version 0.12.3 (qemu-kvm-0.12.3), Copyright (c) 2003-2008 Fabrice Bellard
$ /usr/local/bin/kvm --version
QEMU emulator version 0.15.92 (qemu-kvm-devel), Copyright (c) 2003-2008 Fabrice Bellard

Мой путь имеет /usr/local/bin первым, и когда я делаю , which я вижу , что один. Так что я ожидаю, что это победит. Но вместо этого побеждает более старая версия:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ which kvm
/usr/local/bin/kvm
$ kvm --version
QEMU PC emulator version 0.12.3 (qemu-kvm-0.12.3), Copyright (c) 2003-2008 Fabrice Bellard

Почему kvm --version дает мне 0,12 вместо 0,15???

2 ответа2

7

Linux не принимает решение в этом случае; он снабжен точным путем вашей оболочки. При использовании расширенных оболочек, таких как bash или zsh, инструмент which является неточным, поскольку он проверяет только $ PATH, но есть еще несколько возможностей. Запуск type kvm должен сказать вам, где его ищет оболочка.

  • " hashed ": при первом запуске команды оболочка bash запоминает свое местоположение, чтобы ей не пришлось снова искать весь $ PATH. Запоминаемые места хранятся только в памяти. Используйте hash чтобы перечислить их, и hash -r для сброса или просто запустите второе окно оболочки.

  • « alias »: возможно, вы создали псевдоним « kvm », указывающий на старый путь. Если это так, используйте unalias kvm чтобы удалить псевдоним.

  • « function »: похожа на псевдонимы, но более выразительна. Опять же, возможно, вы добавили и забыли функцию с именем kvm указывающую на неверный путь. Используйте unset kvm чтобы удалить такую функцию.

2

Вы можете переопределить поиск PATH, объявив псевдоним

alias kvm=/sbin/kvm

Попробуйте type -a kvm

Я создал псевдоним для даты

$ which -a date
/usr/local/bin/date
/bin/date

$ type -a date
date is aliased to `/bin/date'
date is /usr/local/bin/date
date is /bin/date

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .