Кажется, мои команды терминала 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-found, который является скриптом Python 3. Этот обработчик вызывается для команд, которые Bash не может найти.

Поэтому в качестве временного решения вы можете отключить обработчик:

unset -f command_not_found_handle

Обновление 2:

После некоторого обсуждения с автором выяснилось, что проблема вызвана исполняемым файлом Python 2.7, случайно помещенным в /usr/bin/python3.4. (Поэтому мое первое обновление было не очень полезным, но оно впересмотр 4если вы хотите прочитать это). Если это случится с вами,не перезагружайте компьютер! Некоторые части графического интерфейса зависят от 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:

Автор статьи в итоге переустановил 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. Все остальные проверенные мной пакеты ( python3, python3.4, python3-minimal) зависят от него python3.4-minimalпо этой причине.

(OP и я наткнулись на это решение в первый раз. Более подробную информацию о том, что я пробовал, что еще я накосячил и как я это исправил, читайте здесь.редакция 9 этого ответа.)

Связанный контент