为什么 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并且该目录在我的路径变量中,为什么我会收到以下错误?

$ 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

看起来你有一个具有该名称的别名或 shell 函数;我相信它们都会绕过你的 $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

相关内容