
我正在嘗試運行一個程序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一下就好了。
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