Wie behebe ich „/usr/bin/python: Keine solche Datei oder kein solches Verzeichnis“, wenn ich in Bash einen ungültigen Befehl eingebe?

Wie behebe ich „/usr/bin/python: Keine solche Datei oder kein solches Verzeichnis“, wenn ich in Bash einen ungültigen Befehl eingebe?

Ich habe gerade Ubuntu 18.04.4 LTS unter Windows unter Windows Subsystem For Linux (WSL) installiert. Wenn ich in meinem Bash-Terminal einen Befehl ausführe, der nicht existiert (wenn ich beispielsweise versehentlich ein zusätzliches s zu füge ls), erhalte ich diese Fehlermeldung:

$ lss
-bash: /usr/bin/python: No such file or directory

Der Fehler ist richtig, ich habe nur Python3 installiert:

$ ls /usr/bin/python*
/usr/bin/python3           /usr/bin/python3-jsonpatch    /usr/bin/python3-jsonschema  /usr/bin/python3.6m
/usr/bin/python3-jsondiff  /usr/bin/python3-jsonpointer  /usr/bin/python3.6           /usr/bin/python3m

Aus meiner früheren Verwendung von Ubuntu weiß ich noch, dass die Meldung eigentlich lauten sollte: „Das Programm ‚lss‘ ist in den folgenden Paketen zu finden:“ Ich brauche diese Meldung nicht mehr und möchte auch nicht erst Python2 installieren, nur um es zum Laufen zu bringen (diese Frage hat Antworten zur Lösung des Problems durch die Installation von py2).

Ist es möglich, dies zu beheben, ohne Python 2 zu installieren, Python 3 als 2 zu verknüpfen oder perfekt zu werden und nie wieder Tippfehler zu machen?

Idealerweise könnte ich das Skript "Befehl existiert nicht" auf Python3 portieren oderdeaktiviere es vollständig.

Antwort1

Python3 ist kein direkter Ersatz für Python2. Sie benötigen eine Python3-Version von lss.

Ich würde es aktualisieren lss, wenn ich du wäre. Es ist ein eigenständiges Skript und die Quelle finden Sie untergithub. 1 ist offensichtlich:

print 'Usage:', __file__, '/path/to/dir'

„print“ muss bei Verwendung von Python3 „(“ und „)“ verwenden. Ich würde das Skript in eine Datei mit dem Namen lss3oder so ähnlich schreiben und es verwenden, python3 lss3um Fehler zu finden und zu beheben.

Antwort2

command_not_found_handleEs stellte sich heraus, dass ich die Funktion überschrieben hatte (eine Bash-Funktion) mit etwas, das pythondirekt in meiner Bashrc aufgerufen hat:

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found ]; then
    function command_not_found_handle {
        # check because c-n-f could've been removed in the meantime
        if [ -x /usr/lib/command-not-found ]; then
           /usr/bin/python /usr/lib/command-not-found -- $1
           return $?
        else
           return 127
        fi
    }
fi

Dieser Code ist nicht mehr erforderlich (war er das jemals?) und durch das Entfernen wurde mein Problem behoben – jetzt erscheint wieder die alte Ausgabe „ist in folgenden Paketen zu finden“.

Der Vollständigkeit halber: Wenn ich den Python-Code und die einfache Ausgabe, dass der Befehl nicht existiert, überspringen wollte, könnte ich Folgendes in meine Bashrc einfügen:

function command_not_found_handle {
    echo Command not found: $1
    return 127
}

verwandte Informationen