EMZETT.
Login

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 (gti statt git).
  • 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

  1. Schreibweise prüfen und mit Tab vervollständigen.
  2. Installieren: sudo apt install paketname (oder Paketmanager deiner Distribution). Vorschläge macht oft schon die Shell (command-not-found-Paket).
  3. Pfad prüfen: echo $PATH, which befehl, type befehl.
  4. Zum PATH hinzufügen (in ~/.bashrc oder ~/.zshrc): export PATH="$HOME/.local/bin:$PATH", dann source ~/.bashrc.
  5. Eigenes Skript: ./skript.sh aufrufen, mit chmod +x skript.sh ausführbar machen.
  6. 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