Ubuntuターミナルで「command not found」とエコーする代わりに間違ったコマンドを実行すると、ターミナルは何もしません。 Ctrl+C いくつかのpython例外スタックトレースをエコーしています。何か間違えている?どうすれば修正できますか?
たとえば、「sdf」と入力しても、何も実行されません。 「sdf」は有効なコマンドではありません。
しかし、私が押すと Ctrl+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's answer とコメントに従ってください。問題を特定するのにポイントがあるようです。
/etc/bash.bashrc
は、Python 3スクリプトであるcommand_not_found_handle
を呼び出す関数/usr/lib/command-not-found
を定義します。このハンドラは、Bashが見つけられないコマンドに対して呼び出されます。
そのため、包帯の修正として、ハンドラーの設定を解除できます。
unset -f command_not_found_handle
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であるため、プロセスが繰り返されます。
OPは最終的にUbuntuを再インストールしましたが、私は好奇心が強いのでVMを開き、同様の問題(同じ問題でない場合)を引き起こし、修正しました。
問題を引き起こした
Sudo cp /usr/bin/python2.7 /usr/bin/python3.4
問題を確認しました
python3 --version
を実行し、Python 2.7.6
を取得しましたsdf
を実行しようとしましたが、Ctrl + Cを押してループを停止する必要がありました修正済み:
Sudo apt-get install --reinstall python3.4-minimal
パッケージpython3.4-minimal
は、Python 3.4実行可能ファイル自体を提供します。私がチェックした他のすべてのパッケージ(python3
、python3.4
、python3-minimal
)は、その理由でpython3.4-minimal
に依存しています。
(OPと私は最初にこのソリューションに出くわしました。私が試したこと、他に何を台無しにし、どのように修正したかについての詳細は、 この回答の改訂9 を読んでください。)