Мои команды терминала Ubuntu, похоже, работают на python

Когда я запускаю неправильную команду на своем терминале Ubuntu, вместо вывода «команда не найдена», терминал ничего не делает, и когда я нажимаю Ctrl + C это повторяет некоторую трассировку стека исключений Python. Что-то не так? Как я могу это исправить?

Например, когда я ввожу «sdf», он ничего не делает. «sdf» не является допустимой командой.

When I enter an invalid command, terminal does nothing.

Но когда я нажимаю Ctrl + C , он печатает эту трассировку стека исключений Python .

When I press ctr-C it is echo-ing some python exception stack

Трассировка стека каждый раз отличается.

Я использую 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 и комментарии, по-видимому, находятся в моменте выявления проблемы.

3
задан 24 November 2017 в 23:30

1 ответ

/etc/bash.bashrc определяет функцию command_not_found_handle, который звонит /usr/lib/command-not-found, который является сценарием Python 3. Этот обработчик называют для команд, которые не может найти Bash.

Таким образом, как бандаж фиксируют, можно сбросить обработчик:

unset -f command_not_found_handle

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

После некоторого обсуждения с OP оказывается, что проблема вызывается исполняемым файлом Python 2.7, случайно помещенным в/usr/bin/python3.4. (Таким образом, мое первое обновление не было очень полезно, но это находится в пересмотре 4, если Вы хотите считать его). Если это происходит с Вами, не перезапускайте свой компьютер! Некоторые части GUI зависят от Python 3. Необходимо будет, вероятно, сохранить терминал открытым также.

BTW, это объясняет бесконечный цикл при вызове неизвестной команды при подсказке 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-minimal) зависьте от python3.4-minimal по этой причине.

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

4
ответ дан 24 November 2017 в 23:30

Другие вопросы по тегам:

Похожие вопросы: