我的 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。关注wjandrea 的回答并且评论似乎正确地指出了问题所在。

答案1

/etc/bash.bashrc定义一个函数command_not_found_handle,它调用/usr/lib/command-not-foundPython 3 脚本。当 Bash 无法找到命令时,将调用此处理程序。

因此,作为一项补救措施,您可以取消设置处理程序:

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-minimal本身提供了 Python 3.4 可执行文件。我检查过的所有其他软件包(python3、、)都依赖python3.4于此。python3-minimalpython3.4-minimal

(楼主和我第一次尝试这个解决方案时都遇到了麻烦。有关我尝试过的方法、我还搞砸了什么以及如何修复它的更多详细信息,请阅读本答案的第 9 次修订

相关内容