Когда я запускаю неправильную команду на своем терминале Ubuntu, вместо вывода «команда не найдена», терминал ничего не делает, и когда я нажимаю Ctrl kbd> + C kbd > это повторяет некоторую трассировку стека исключений Python. Что-то не так? Как я могу это исправить?
Например, когда я ввожу «sdf», он ничего не делает. «sdf» не является допустимой командой.
Но когда я нажимаю Ctrl kbd> + C kbd>, он печатает эту трассировку стека исключений 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 и комментарии, по-видимому, находятся в моменте выявления проблемы.
/etc/bash.bashrc
определяет функцию command_not_found_handle
, который звонит /usr/lib/command-not-found
, который является сценарием Python 3. Этот обработчик называют для команд, которые не может найти Bash.
Таким образом, как бандаж фиксируют, можно сбросить обработчик:
unset -f command_not_found_handle
После некоторого обсуждения с 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, повторения процесса.
OP закончил тем, что переустановил Ubuntu, но мне было любопытно, таким образом, я открыл VM, вызвал подобную проблему (если не та же проблема), и зафиксировал его.
Вызванный проблема
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 из этого ответа.)