
プログラムを実行しようとしています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
どうやら、その名前のエイリアスまたはシェル関数があるようです。これらは両方とも $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