我正在尝试运行一个程序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