Как работает автозаполнение терминалов Ubuntu?

Как узнать, какие аргументы ожидает команда и ожидает ли она ввода файла? Как он узнает, какие команды доступны?

0
задан 24 April 2019 в 02:26

1 ответ

Практически идентичный вопрос задавался в StackExchange:

Как работает завершение вкладки bash?

Я тратил много времени на в последнее время, и мне интересно, как работает автозаполнение вкладки. Какой механизм стоит за этим? Как bash знает содержимое каждого каталога?


Ответ с наибольшим количеством голосов:

Есть два этапа автозаполнения:

    [ 1115]

    Библиотека readline, как уже упоминалось в fixje, управляет редактированием командной строки и вызывает нажатие на bash при нажатии клавиши tab для включения завершения. Затем Bash дает (см. Следующий пункт) список возможных дополнений и readline вставляет столько символов, сколько однозначно идентифицируется уже набранными символами. (Вы можете настроить библиотеку readline довольно много, см. Раздел Редактирование командной строки). из руководства Bash для деталей.)

  • Сам Bash имеет встроенный complete для определения механизма завершения для отдельных команд. Если для текущей команды ничего не определено, она использует завершение по имени файла (используя opendir / readdir, как сказал Игнасио).

    Часть для определения ваших собственных завершений описана в разделе Программируемое завершение . Короче говоря, с помощью complete «options» «command» вы определяете завершение для некоторой команды. Например, complete -u su говорит при заполнении аргумента для команды su, ищите пользователей текущей системы .

    Если это сложнее, чем могут покрыть обычные опции (например, различные дополнения в зависимости от индекса аргумента или в зависимости от предыдущих аргументов), вы можете использовать -F function, который затем вызовет функцию оболочки для генерации списка возможных пополнения. (Это используется, например, для завершения git, что очень сложно, зависит от подкоманды и иногда от заданных опций, а иногда с использованием имен ветвей (о которых bash ничего не знает).

[ 1124] Вы можете перечислить существующие дополнения, определенные в вашей текущей среде bash, используя просто complete, чтобы иметь представление о том, что возможно. Если у вас установлен пакет завершения bash (или, хотя он назван в вашей системе), дополнения поскольку установлено много команд, и, как сказал Вриккен, /etc/bash_completion содержит сценарий bash, который затем часто выполняется при запуске оболочки для настройки этого. Дополнительные пользовательские сценарии завершения могут быть помещены в /etc/bash_completion.d; все они получены из [ 118].

0
ответ дан 24 April 2019 в 02:26

Другие вопросы по тегам:

Похожие вопросы: