web-dev-qa-db-ja.com

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

Ubuntuターミナルで「command not found」とエコーする代わりに間違ったコマンドを実行すると、ターミナルは何もしません。 Ctrl+C いくつかのpython例外スタックトレースをエコーし​​ています。何か間違えている?どうすれば修正できますか?

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

When I enter an invalid command, terminal does nothing.

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

When I press ctr-C it is echo-ing some python exception stack

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

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's answer とコメントに従ってください。問題を特定するのにポイントがあるようです。

2
Ishtiaque Khan

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

そのため、包帯の修正として、ハンドラーの設定を解除できます。

unset -f command_not_found_handle

アップデート2:

OPとのいくつかの議論の後、問題はPython 2.7実行可能ファイルが誤って/usr/bin/python3.4に置かれたことが原因であることがわかりました。 (つまり、私の最初の更新はあまり有用ではありませんでしたが、読みたいのであれば revision 4 にあります)。これが発生した場合、コンピュータを再起動しないでください!GUIの一部はPythonに依存しています。端末も開いたままにする必要があります。

ところで、これは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-minimalは、Python 3.4実行可能ファイル自体を提供します。私がチェックした他のすべてのパッケージ(python3python3.4python3-minimal)は、その理由でpython3.4-minimalに依存しています。

(OPと私は最初にこのソリューションに出くわしました。私が試したこと、他に何を台無しにし、どのように修正したかについての詳細は、 この回答の改訂9 を読んでください。)

4
wjandrea