command not found (bash und zsh)
Kurz: Die Shell findet das eingegebene Programm weder in den PATH-Ordnern noch als eingebauten Befehl.
Genauer: Meldung: bash: foo: command not found oder zsh: command not found: foo. Die Shell sucht Programme in den Ordnern der Umgebungsvariable PATH. Ist der Befehl dort nicht zu finden, kommt dieser Fehler (Exit-Code 127).
Im Detail
Ursachen
- Tippfehler im Befehl (
gtistattgit). - Das Programm ist nicht installiert.
- Es ist installiert, aber sein Ordner steht nicht im PATH (zum Beispiel
~/.local/bin,/usr/local/bin,~/.cargo/bin). - Ein Skript im aktuellen Ordner wird ohne
./aufgerufen. - Nach der Installation wurde das Terminal nicht neu gestartet.
- Eine falsche Shell-Zeile (
#!/bin/bsh) oder Windows-Zeilenenden (\r) im Skript.
Lösungswege
- Schreibweise prüfen und mit Tab vervollständigen.
- Installieren:
sudo apt install paketname(oder Paketmanager deiner Distribution). Vorschläge macht oft schon die Shell (command-not-found-Paket). - Pfad prüfen:
echo $PATH,which befehl,type befehl. - Zum PATH hinzufügen (in
~/.bashrcoder~/.zshrc):export PATH="$HOME/.local/bin:$PATH", dannsource ~/.bashrc. - Eigenes Skript:
./skript.shaufrufen, mitchmod +x skript.shausführbar machen. - Bei
\r-Zeilenenden:dos2unix skript.sh.
Hinweis
Füge nie . (aktuelles Verzeichnis) vorne in den PATH ein: Ein Angreifer könnte dir eine Datei mit einem gewöhnlichen Befehlsnamen unterschieben. Unter Windows lautet die ähnliche Meldung: „Der Begriff … wird nicht als Name eines Cmdlets … erkannt“ oder „… ist nicht als interner oder externer Befehl … bekannt“.
Siehe auch: Exit-Code 126/127, Permission denied, bash