Warum überprüft Ubuntu nicht das richtige Verzeichnis in der Variable $PATH?

Warum überprüft Ubuntu nicht das richtige Verzeichnis in der Variable $PATH?

Ich versuche, ein Programm auszuführenredis-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

Wenn das Programm redis-cliim Verzeichnis vorhanden ist /usr/local/binund sich dieses Verzeichnis in meiner Pfadvariable befindet, warum erhalte ich dann die folgende Fehlermeldung?

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

BEARBEITEN

$ /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

Antwort1

Es besteht die Möglichkeit, dass sich in /usr/bin/redis-cli früher ein Redis-CLI befand, das jetzt gelöscht wurde.

Bash verwaltet einen internen Hash der ausführbaren Dateien auf Ihrem Pfad, der nicht aktualisiert wurde. Wenn dieses Problem erneut auftritt, hashen Sie es erneut und es wird funktionieren.

hash redis-cli

Antwort2

Es sieht so aus, als hätten Sie einen Alias ​​oder eine Shell-Funktion mit diesem Namen. Ich glaube, beide würden Ihren $PATH umgehen und vor „which“ verborgen sein.

So suchen Sie nach einem Alias:

alias redis-cli

So löschen Sie einen Alias, wenn Sie einen finden:

unalias redis-cli

So prüfen Sie, ob eine Funktion vorliegt:

declare -f redis-cli

So löschen Sie eine Funktion, wenn Sie eine finden:

unset -f redis-cli

Wenn sich herausstellt, dass einer dieser Befehle das Problem ist, helfen diese Befehle nur bis zum Ende dieser Terminalsitzung und Sie müssen sie beim nächsten Mal erneut ausführen. Sie sollten Ihre .bashrc- und .profile-Dateien überprüfen, um festzustellen, ob dort irgendwelche fehlerhaften Befehle enthalten sind, die redis-cli erwähnen. Wenn das nicht funktioniert, befinden sie sich möglicherweise irgendwo in /etc.

grep redis-cli /etc

verwandte Informationen