
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 lss3
oder so ähnlich schreiben und es verwenden, python3 lss3
um Fehler zu finden und zu beheben.
Antwort2
command_not_found_handle
Es stellte sich heraus, dass ich die Funktion überschrieben hatte (eine Bash-Funktion) mit etwas, das python
direkt 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
}