3

Я смотрю, чтобы увидеть, где находится команда:

xxx:~/mono/mono-2.6.7$ which mono
/usr/local/bin/mono

Если я выполню это напрямую, нет проблем:

xxx:~/mono/mono-2.6.7$ /usr/local/bin/mono -V
Mono JIT compiler version 2.6.7 (tarball Mon Aug  2 16:01:50 UTC 2010)
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
....

Но если я выполню команду без пути, она не сможет найти ее:

xxx:~/mono/mono-2.6.7$ mono
bash: /usr/bin/mono: No such file or directory

В /usr /bin нет монофайла:

xxx:~/mono/mono-2.6.7$ ls -l /usr/bin/mono
ls: cannot access /usr/bin/mono: No such file or directory

Вот мой путь:

xxx:~/mono/mono-2.6.7$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Разве он не ищет каждый каталог, разделенный двоеточиями? Так не должен ли он найти моно в /usr /local /bin?

Если я вхожу в систему как root, это работает. Я могу выполнить моно в командной строке, и он находит его. Разрешения:

xxx:~/mono/mono-2.6.7$ ls -l /usr/local/bin/mono
-rwxr-xr-x 1 root root 8452592 2010-08-02 16:23 /usr/local/bin/mono

Является ли пользователь, которого я использую, не частью нужной группы?

3 ответа3

7

Bash хранит кэш командных мест в памяти, поэтому он не должен выполнять полное исследование PATH при каждом запуске команды. В вашей первоначальной сессии bash, bash ранее запомнил, что mono был /usr/bin/mono . Затем вы удалили /usr/bin/mono и добавили /usr/local/bin/mono , но ваш работающий bash все еще имел старое местоположение в своем кэше.

Вы можете манипулировать кешем команд с помощью встроенного hash . В частности hash -r очищает кеш.

which является внешней командой, поэтому она не использует кэш bash и каждый раз выполняет поиск по PATH. Вы могли бы также использовать type , который является встроенным и поэтому использует кеш поиска.

0

Может быть, у вас есть псевдоним, определенный для моно? Проверьте, что следующие файлы в вашем домашнем каталоге: .bashrc, .profile, .login или .bash_profile

... не содержит ничего подобного

 alias mono="/usr/bin/mono"

Это также может быть расположено в /etc/bashrc или /etc/profile.

Псевдоним команды показывает все в настоящее время определенные псевдонимы.

0

Я вышел из системы, а затем снова вошел в систему, и это сработало. Должно быть, я делал что-то глупое. Но это работает!

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