Meine Ubuntu-Terminalbefehle scheinen auf Python zu laufen

Meine Ubuntu-Terminalbefehle scheinen auf Python zu laufen

Wenn ich auf meinem Ubuntu-Terminal einen falschen Befehl ausführe, gibt das Terminal nicht „Befehl nicht gefunden“ aus, sondern es passiert nichts, und wenn ich Ctrl+ drücke C, gibt es einen Python-Ausnahme-Stacktrace aus. Stimmt etwas nicht? Wie kann ich das beheben?

Wenn ich beispielsweise „sdf“ eingebe, passiert nichts. „sdf“ ist kein gültiger Befehl.

Wenn ich einen ungültigen Befehl eingebe, passiert im Terminal nichts.

Aber wenn ich Ctrl+ drücke C, wird dieser Python-Ausnahmestapeltrace gedruckt.

Wenn ich Strg-C drücke, wird ein Python-Ausnahmestapel ausgegeben

Der Stacktrace ist jedes Mal anders.

Ich verwende Ubuntu 14.04, daher ist python2 die Standardeinstellung

$ type python python2 python3
python is /usr/bin/python
python2 is /usr/bin/python2
python3 is hashed (/usr/bin/python3)
$ readlink /usr/bin/python /usr/bin/python2 /usr/bin/python3
python2.7
python2.7
python3.4
$ python --version
Python 2.7.6
$ python3 --version
Python 2.7.6
$ readlink /usr/bin/python3.4
$ 
  • sudo apt-get install --reinstall pythonhat nicht geholfen.
  • sudo apt-get install --reinstall python3hat einen Fehler ausgelöst

Aktualisieren:
Nachdem ich viele Ansätze ausprobiert hatte, installierte ich Ubuntu schließlich neu. Folgenwjandreas Antwortund die Kommentare scheinen das Problem auf den Punkt zu bringen.

Antwort1

/etc/bash.bashrcdefiniert eine Funktion command_not_found_handle, die aufruft /usr/lib/command-not-found, ein Python 3-Skript. Dieser Handler wird für Befehle aufgerufen, die Bash nicht finden kann.

Als Fix für das nächste Problem können Sie den Handler folgendermaßen aufheben:

unset -f command_not_found_handle

Aktualisierung 2:

Nach einigen Diskussionen mit OP stellte sich heraus, dass das Problem durch eine Python 2.7-Ausführbare Datei verursacht wurde, die versehentlich unter /usr/bin/python3.4 abgelegt wurde. (Mein erstes Update war also nicht sehr nützlich, aber es ist inRevision 4wenn Sie es lesen möchten). Wenn Ihnen das passiert,starten Sie Ihren Computer nicht neu! Einige Teile der GUI hängen von Python 3 ab. Sie müssen wahrscheinlich auch das Terminal geöffnet lassen.

Dies erklärt übrigens die Endlosschleife beim Aufrufen eines unbekannten Befehls in der Bash-Eingabeaufforderung. /usr/lib/command-not-foundEs enthält diesen Abschnitt:

if sys.version < '3':
    # We might end up being executed with Python 2 due to an old
    # /etc/bash.bashrc.
    import os
    if "COMMAND_NOT_FOUND_FORCE_PYTHON2" not in os.environ:
        os.execvp("python3", [sys.argv[0]] + sys.argv)

Das bedeutet, dass bei der Ausführung durch Python 2 aufgerufen wird, python3da es python3sich aber tatsächlich um Python 2 handelt, wird der Vorgang wiederholt.

Aktualisierung 3:

OP hat Ubuntu schließlich neu installiert, aber aus Neugier habe ich eine VM geöffnet, ein ähnliches Problem (wenn nicht das gleiche) verursacht und es behoben.

  1. Das Problem wurde verursacht

    sudo cp /usr/bin/python2.7 /usr/bin/python3.4
    
  2. Das Problem wurde bestätigt

    • Ran python3 --version, bekamPython 2.7.6
    • Habe versucht, es auszuführen sdf, musste Strg+C drücken, um die Schleife zu stoppen
  3. Behoben:

    sudo apt-get install --reinstall python3.4-minimal
    

    Das Paket python3.4-minimalstellt die ausführbare Datei von Python 3.4 selbst bereit. Alle anderen Pakete, die ich überprüft habe ( python3, python3.4, python3-minimal), sind python3.4-minimalaus diesem Grund davon abhängig.

(OP und ich sind beim ersten Mal über diese Lösung gestolpert. Weitere Einzelheiten darüber, was ich versucht habe, was ich sonst noch vermasselt habe und wie ich es behoben habe, finden Sie unterRevision 9 dieser Antwort.)

verwandte Informationen