Почему Ubuntu не проверяет правильный каталог в переменной $PATH?

Почему Ubuntu не проверяет правильный каталог в переменной $PATH?

Я пытаюсь запустить программу.redis-cli

$ ls -lh /usr/local/bin/ | grep redis
-rwxr-xr-x 1 root root 4.2M Mar 24 19:49 redis-cli
-rwxr-xr-x 1 root root 5.6M Mar 24 19:49 redis-server

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Если программа redis-cliсуществует в каталоге /usr/local/bin, и этот каталог указан в моей переменной path, почему я получаю следующую ошибку?

$ redis-cli
-bash: /usr/bin/redis-cli: No such file or directory

РЕДАКТИРОВАТЬ

$ /usr/local/bin/redis-cli
redis 127.0.0.1:6379>

$ redis-cli
-bash: /usr/bin/redis-cli: No such file or directory

$ file /usr/local/bin/redis-cli
/usr/local/bin/redis-cli: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x3715af7983c534d902d8dc627f9b0f1b4c8b8e80, not stripped

решение1

Скорее всего, раньше в /usr/bin/redis-cli был redis-cli, который теперь удален.

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

hash redis-cli

решение2

Похоже, у вас есть псевдоним или функция оболочки с таким именем; я полагаю, что оба варианта обойдут ваш $PATH и будут скрыты от «which».

Чтобы проверить наличие псевдонима:

alias redis-cli

Чтобы удалить псевдоним, если вы его нашли:

unalias redis-cli

Чтобы проверить функцию:

declare -f redis-cli

Чтобы удалить функцию, если вы ее нашли:

unset -f redis-cli

Если одна из них действительно окажется проблемой, то эти команды помогут только до конца сеанса терминала, и вам придется снова запустить их в следующий раз. Вам нужно будет проверить ваши .bashrc и .profile, чтобы увидеть, нет ли там каких-либо мошеннических команд, которые упоминают redis-cli. Если это не сработает, они могут быть где-то в /etc.

grep redis-cli /etc

Связанный контент