23

Когда вы печатаете неверную команду, говорите, что хотите сделать:

$ cd ..
$ ls

Но вместо этого вы набираете слишком быстро и в итоге нажимаете Enter между l и s, поэтому вы получаете:

$ cd ..
$ l
sbash: l: command not found...

Это происходит все время, конечно, когда мы печатаем быстро. Что меня интересует, так это источник 2,5-секундной (в моей системе) паузы после появления на экране неверного текста команды. Мне кажется, он мгновенно распознает плохую команду, печатает сообщение об ошибке, но потом ради интереса ждет 2,5 секунды, прежде чем вернуть меня в командную строку. Что вызывает это? Есть ли способ исправить это? Это небольшое раздражение, но я бы хотел избавиться от него. :)

Изменить: Запуск системы Fedora 16

3 ответа3

42

Этот тип поведения вызван тем, что инструмент часто устанавливается в некоторых дистрибутивах, которые подключаются к bash. Этот хук делает так, что если вы пытаетесь запустить команду, а команда не существует, bash будет искать файлы, доступные в настроенных репозиториях, и сообщать вам, какой пакет вам нужно установить, чтобы получить эту команду.

Если вы не работаете в системе Debian, вам нужно просмотреть свои профили запуска файлов bash и т.д. И посмотреть, определяет ли что-нибудь функцию с именем command_not_found_handle . Если эта функция bash определена, то она будет вызываться всякий раз, когда вы запускаете команду, и соответствующая программа не может быть найдена в вашем пути поиска. Если вы запускаете typset | less и, просматривая вывод, вы увидите функцию command_not_found_handle() если она была определена.

В Debian/Ubuntu пакет, обеспечивающий это поведение, не найден. Если вы очистите это, то вы отключите поиск, который замедляет работу.

Вот пример

# command-not-found installed
$ time pwgen
The program 'pwgen' is currently not installed.  To run 'pwgen' please ask your administrator to install the package 'pwgen'
pwgen: command not found

real    0m0.074s
user    0m0.032s
sys     0m0.040s

# purge command-not-found and restart bash
$ time pwgen
-bash: pwgen: command not found

real    0m0.002s
user    0m0.000s
sys     0m0.000s

Точное время, конечно, будет другим для вас. Я провел свои тесты на довольно мощном сервере.

6

Часть вопроса была: «Есть ли способ исправить это (в Fedora)?Msgstr "Внизу вашего .bashrc файла добавьте команду

unset command_not_found_handle

Возможно, вы захотите сделать это в конце вашего .bashrc (или близко к нему), потому что вы можете запустить /etc /bashrc или другие скрипты bash в верхней части вашего .bashrc.

5

На fedora этим поведением можно управлять, изменив файл конфигурации /etc/PackageKit/CommandNotFound.conf .

Установка SoftwareSourceSearch=false избавит от задержки, так как не будет пытаться найти пакет с отсутствующей командой с помощью диспетчера пакетов.

Вы также можете изменить время ожидания поиска пакета, изменив параметр MaxSearchTime=2000 чтобы указать количество миллисекунд, которые вы готовы подождать, пока поиск пакета не вернет совпадение. Я считаю, что значение по умолчанию в 2 секунды недостаточно для возврата любых совпадений и просто вызывает нежелательную задержку при опечатке.

Либо MaxSearchTime чтобы обеспечить полезный вывод, либо отключите SoftwareSourceSearch чтобы полностью устранить задержку.

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