我的 Ubuntu 終端命令似乎在 python 上運行

我的 Ubuntu 終端命令似乎在 python 上運行

當我在 Ubuntu 終端上運行錯誤的命令時,終端不會回顯“未找到命令”,而是不執行任何操作,當我按Ctrl+時C,它會回顯一些 python 異常堆疊追蹤。有什麼問題嗎?我怎樣才能解決這個問題?

例如,當我輸入“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。跟隨維詹德里亞的回答和評論,似乎在確定問題上是切中要害的。

答案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,但我很好奇,所以我打開了一個虛擬機,導致了類似的問題(如果不是相同的問題),並修復了它。

  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.)

相關內容