當我在 Ubuntu 終端上運行錯誤的命令時,終端不會回顯“未找到命令”,而是不執行任何操作,當我按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。跟隨維詹德里亞的回答和評論,似乎在確定問題上是切中要害的。
答案1
/etc/bash.bashrc
定義一個函數command_not_found_handle
,它調用/usr/lib/command-not-found
,這是一個 Python 3 腳本。對於 Bash 找不到的命令,會呼叫此處理程序。
因此,作為繃帶修復,您可以取消設定處理程序:
unset -f command_not_found_handle
更新2:
經過與 OP 的討論後,發現問題是由意外放置在 /usr/bin/python3.4 的 Python 2.7 可執行檔引起的。 (所以我的第一次更新不是很有用,但它在修訂版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,但我很好奇,所以我打開了一個虛擬機,導致了類似的問題(如果不是相同的問題),並修復了它。
導致了問題
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.)