Що змушує баш робити паузу після поганої команди?


23

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

$ cd ..
$ ls

Але замість цього ви набираєте занадто швидко і в кінцевому підсумку натискаєте клавіші "l" і "s", тож ви отримуєте:

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

Це відбувається весь час, звичайно, коли ми друкуємо швидко. Мені цікаво джерело паузи 2,5 секунди (у моїй системі) після появи на екрані невірного тексту команди. Мені здається, він розпізнає погану команду миттєво, друкує повідомлення про помилку про неї, але потім просто заради задоволення чекає 2,5 секунди, перш ніж повернути мене до командного рядка. Що це викликає? Чи є спосіб виправити це? Це невелике роздратування, але я хотів би позбутися його. :)

Редагування: Запуск системи Fedora 16


Ви забули згадати, на якій ОС ви працюєте.
Даніель Бек

що ти, ти не псевдонім lss? :)
dotjoe

Відповіді:


42

Такий тип поведінки зумовлений інструментом, який часто встановлюється на деяких дистрибутивах, які підключаються до bash. Цей гак робить це так, що якщо ви спробуєте запустити команду, а команда не існує, bash здійснить пошук файлів, доступних у налаштованих сховищах, та скаже вам, який пакет вам потрібно встановити, щоб отримати цю команду.

Якщо ви не в системі Debian, вам потрібно буде переглянути ваші профілі файлів запуску файлів і так далі і побачити, чи щось визначає названу функцію 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

Точний час, звичайно, відрізнятиметься від вас. Я провів свої тести на досить приємному сервері.


10
У моєму випадку у Fedora виявився пакет під назвою: PackageKit-command-not-found
Fuu

6

Частина питання полягала в тому, "чи є спосіб виправити це (у Fedora)?" Є: внизу вашого .bashrc-файлу додайте команду

unset command_not_found_handle

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


5

На Fedora цю поведінку можна контролювати, змінюючи /etc/PackageKit/CommandNotFound.confфайл конфігурації.

Налаштування SoftwareSourceSearch=falseпозбавиться від затримки, оскільки вона не намагатиметься знайти пакет із відсутньою командою за допомогою менеджера пакунків.

Ви можете також змінити кількість часу, коли він буде чекати пошуку пакету, замість цього, змінивши MaxSearchTime=2000опцію, щоб вказати кількість мілісекунд, які ви готові чекати пошуку пакету, щоб повернути збіг. Я вважаю, що за замовчуванням 2 секунди недостатньо довго, щоб повернути відповідність, і просто спричиняє небажану затримку, коли у вас є помилка друку.

Або підключити, MaxSearchTimeщоб забезпечити корисний вихід, або відключити, SoftwareSourceSearchщоб повністю усунути затримку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.