Когда я ввожу команду, которая неизвестна в моей системе, вместо обычного сообщения об ошибке asdf: command not found , терминал сидит и ничего не делает. Если я прекращаю его, иногда я ничего не вижу, но иногда я вижу некоторые функции Python, получающие, например, прерывание клавиатуры

$ asd
^CTraceback (most recent call last):
  File "/usr/lib/python2.7/encodings/__init__.py", line 31, in <module>

import codecs
  File "/usr/lib/python2.7/codecs.py", line 8, in <module>
    """#"
KeyboardInterrupt

или же

$ cpioquw
^CTraceback (most recent call last):
  File "/usr/lib/command-not-found", line 5, in <module>
    from __future__ import absolute_import, print_function
KeyboardInterrupt

или же

$ asdf
^CTraceback (most recent call last):
  File "/usr/lib/python2.7/site.py", line 563, in <module>

    main()
  File "/usr/lib/python2.7/site.py", line 546, in main
    known_paths = addsitepackages(known_paths)
  File "/usr/lib/python2.7/site.py", line 328, in addsitepackages
addsitedir(sitedir, known_paths)
  File "/usr/lib/python2.7/site.py", line 190, in addsitedir
    names = os.listdir(sitedir)
KeyboardInterrupt

Кажется, что в сообщениях нет никакой последовательности, и я никогда не видел, чтобы это случилось раньше. Любые идеи о том, откуда может возникнуть проблема или как я могу начать расследование?

Удаление .bashrc , по-видимому, не имеет никакого эффекта, равно как и попытки виртуальных терминалов. Я сделал нового пользователя и поведение там, как и ожидалось. Я предполагаю, что проблема в одном из моих файлов конфигурации bash , но я не знаю, какие из них мне следует проверять.

Я также попытался переустановить пакет command-not-found , который также не имел никакого эффекта.

Я сейчас попробовал

sudo apt-get purge command-not-found command-not-found-data

и выдает ошибку, которая может что-то значить:

$ sudo apt-get purge command-not-found command-not-found-data 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  bbswitch-dkms dkms lib32gcc1 libc6-i386 libcuda1-331 libvdpau1 nvidia-prime
  nvidia-settings python-gdbm screen-resolution-extra
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED
  command-not-found* command-not-found-data* python3-commandnotfound*
0 to upgrade, 0 to newly install, 3 to remove and 238 not to upgrade.
2 not fully installed or removed.
After this operation, 4,205 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 287818 files and directories currently installed.)
Removing command-not-found (0.3ubuntu12) ...
Purging configuration files for command-not-found (0.3ubuntu12) ...
Removing python3-commandnotfound (0.3ubuntu12) ...
  File "/usr/bin/py3clean", line 4
SyntaxError: Non-ASCII character '\xc2' in file /usr/bin/py3clean on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
dpkg: error processing package python3-commandnotfound (--purge):
 subprocess installed pre-removal script returned error exit status 1
  File "/usr/bin/py3compile", line 4
SyntaxError: Non-ASCII character '\xc2' in file /usr/bin/py3compile on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
dpkg: error while cleaning up:
 subprocess installed post-installation script returned error exit status 1
Removing command-not-found-data (0.3ubuntu12) ...
Errors were encountered while processing:
 python3-commandnotfound
E: Sub-process /usr/bin/dpkg returned an error code (1)

Сделав это, я заметил, что если я запускаю python или python3 я получаю ту же версию, 2.7.6. Может быть, это как-то связано с проблемой?

1 ответ1

0

Если вы declare -f -p , bash выведет список всех определенных функций оболочки. Если есть функция с именем command_not_found_handle , эта функция будет вызываться вместо обычного поведения оболочки (только в bash 4). Предположительно, в вашем случае эта функция оболочки зависает.

(В моей системе Debian эта функция определена в /etc/bash.bashrc , который запускается в /etc/profile , который является системным файлом запуска для всех оболочек Bournelike. Все, что он делает, это вызывает команду command-not-found , которая является скриптом Python, от которого вы видите трассировку.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .