Подтвердить что ты не робот

Неопознанные команды в bash захватываются интерпретатором python

Каждый раз, когда я пытаюсь вызвать команду, которая не существует ($ a, например) в консоли (/bin/ bash), интерпретатор ждет долгое время. И когда я прерываю его (^ C), я получаю сообщение об ошибке от интерпретатора Python. Вместо этого я ожидаю, что он скажет мне, что команда не распознана. Почему это происходит?

$ a
^C
Traceback (most recent call last):
  File "/usr/lib/python2.7/encodings/__init__.py", line 32, in <module>
[email protected]:/home/antonio/workspace/biz_index#     from encodings import aliases
  File "/usr/lib/python2.7/encodings/aliases.py", line 17, in <module>
    """
KeyboardInterrupt
^C
4b9b3361

Ответ 1

Если параметр PATH="" исправляет его, то что-то, где-то затеняет пакет python, который вызывается пакетом command-not-found. Недавно я сделал это, написав script под названием struct.py. Вам нужно пройти через каждый каталог на вашем пути, т.е.

/home/antonio/.local/bin
/home/antonio/.local/bin
/usr/local/sbin
/usr/local/bin‌​
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games

и найдите там файлы .py. Один из них имеет имя с одним из встроенных пакетов Python. Кроме того, вы можете удалить каталоги из своего PATH и добавить их обратно до тех пор, пока не узнаете, какой из них он сломал. Как только вы его найдете, вам нужно удалить его или переименовать.

Для этого сделайте однострочный оболочек:

for dir in $(echo $PATH | tr ":" "\n"); do ls -1 $dir | grep "[.]py"; done

Вы можете проверить это в своей собственной оболочке, попробовав следующее (воссоздавая мою ошибку из нескольких дней назад):

echo 'print("HELLO WORLD")' >> struct.py

Теперь в моей оболочке, находящейся в текущем каталоге, я вижу:

➜  client git:(master) ✗ a
HELLO WORLD
zsh: command not found: a

Предположительно, Python script, выполняющий затенение в вашем случае, делает что-то более ресурсоемкое, чем просто печать "HELLO WORLD", следовательно, висит.

Ответ 2

Вы на машине ubuntu? У Ubuntu есть неподтвержденный пакет, который реализован в python, возможно, вы прервали это.

В вашем пути может быть script с тем же именем, что и тот, который вызывается пакетом command-not-found. Если есть, этот script, скорее всего, тот, кто делает висячие. Чтобы напечатать свой путь читаемым способом, запустите echo $PATH | tr -s ':' '\n'.