Я останнім часом проводив багато часу в оболонці і мені цікаво, як працює автозаповнення вкладок. Який механізм за цим? Як баш знає вміст кожного каталогу?
Я останнім часом проводив багато часу в оболонці і мені цікаво, як працює автозаповнення вкладок. Який механізм за цим? Як баш знає вміст кожного каталогу?
Відповіді:
До автозавершення є дві частини:
Бібліотека читання ліній, як уже згадувалося fixje, керує редагуванням командного рядка та повертає назад до bash, коли натискається вкладка, щоб увімкнути завершення. Потім Bash надає (див. Наступний пункт) список можливих доповнень і readline вставляє стільки символів, скільки однозначно ідентифіковано вже введеними символами. (Ви можете досить налаштувати бібліотеку читань, див. Розділ Редагування командного рядка Bash посібник для деталей.)
Сам Bash має вбудований complete
для визначення механізму завершення окремих команд. Якщо для поточної команди нічого не визначено, вона використовувала завершення за назвою файлу (використовуючи opendir / readdir, як сказав Ігнасіо).
Частина для визначення власних доповнень описана в розділі Програмоване завершення . Коротше кажучи,
complete «options» «command»
ви визначаєте виконання для якоїсь команди. Наприклад, complete -u su
говорить,
виконуючи аргумент для su
команди, шукайте користувачів поточної системи .
Якщо це складніше, ніж звичайні параметри можуть охоплювати (наприклад, різні доповнення залежно від індексу аргументу або залежно від попередніх аргументів), ви можете використовувати -F function
, що потім викликає функцію оболонки для створення списку можливих доповнень. (Це використовується, наприклад, для завершення git, яке дуже складне, залежно від підкоманди, а іноді й від наведених варіантів, а також іноді використовує назви гілок (про які нічого не знає баш).
Ви можете перелічити існуючі доповнення, визначені у вашому поточному середовищі bash, використовуючи просто complete
, щоб мати враження про те, що можливо. Якщо у вас встановлений пакет bash-завершення (або він названий у вашій системі), для багатьох команд встановлено доповнення, і, як сказав Вріккен, /etc/bash_completion
міститься скрипт bash, який потім часто виконується при запуску оболонки для налаштування цього. Додаткові спеціальні сценарії завершення можуть бути розміщені в /etc/bash_completion.d
; всі вони отримані з /etc/bash_completion
.
/etc/bash_completion
(принаймні, саме там багато магії в Debian).