私のUbuntuターミナルコマンドはPythonで実行されているようです

私のUbuntuターミナルコマンドはPythonで実行されているようです

Ubuntu ターミナルで間違ったコマンドを実行すると、「コマンドが見つかりません」とエコーされる代わりに、ターミナルは何もせず、Ctrl+を押すとCPython 例外スタック トレースがエコーされます。何か問題がありますか? これを修正するにはどうすればよいでしょうか?

たとえば、「sdf」と入力しても何も起こりません。「sdf」は有効なコマンドではありません。

無効なコマンドを入力すると、ターミナルは何も実行しません。

Ctrlしかし、 +を押すとC、この Python 例外スタック トレースが出力されます。

ctr-Cを押すと、Python例外スタックがエコーされます

スタック トレースは毎回異なります。

私はUbuntu 14.04を使用しているので、python2がデフォルトです

$ 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 python役に立たなかった。
  • sudo apt-get install --reinstall python3エラーが発生しました

アップデート:
いろいろな方法を試した結果、Ubuntuを再インストールすることにしました。wjandrea の回答そしてコメントは、問題を特定する上で的を射ているようです。

答え1

/etc/bash.bashrcは、 Python 3 スクリプトである をcommand_not_found_handle呼び出す関数 を定義します。このハンドラは、Bash が見つけられないコマンドに対して呼び出されます。/usr/lib/command-not-found

したがって、応急処置として、ハンドラーを設定解除することができます。

unset -f command_not_found_handle

アップデート2:

OPと話し合った結果、この問題はPython 2.7の実行ファイルが誤って/usr/bin/python3.4に置かれたために発生したことが判明しました。(最初のアップデートはあまり役に立ちませんでしたが、改訂4もしあなたがそれを読みたいなら。もしあなたがこれを読んだら、コンピュータを再起動しないでください。 GUI の一部は Python 3 に依存しています。ターミナルも開いたままにしておく必要があるでしょう。

ちなみに、これは、Bash プロンプトで不明なコマンドを呼び出すときの無限ループについて説明しています。/usr/lib/command-not-foundこのセクションには次の内容が含まれています。

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)

つまり、Python 2 によって実行されると が呼び出されますpython3が、 はpython3実際には Python 2 であるため、プロセスが繰り返されます。

アップデート3:

OP は最終的に Ubuntu を再インストールしましたが、私は興味があったので VM を開いて同様の問題 (同じ問題ではないにしても) を引き起こし、それを修正しました。

  1. 問題を引き起こした

    sudo cp /usr/bin/python2.7 /usr/bin/python3.4
    
  2. 問題を確認しました

    • 走っpython3 --versionて、Python 2.7.6
    • 実行しようとしましたがsdf、ループを停止するにはCtrl+Cを押さなければなりませんでした
  3. 修正しました:

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

    パッケージはpython3.4-minimalPython 3.4 実行ファイル自体を提供します。私が確認した他のすべてのパッケージ ( python3、、) は、その理由に依存していpython3.4ます。python3-minimalpython3.4-minimal

(OPと私は、最初はこの解決策につまずきました。私が試したこと、他に何を間違えたか、そしてどのように修正したかについての詳細は、この回答の改訂9

関連情報