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

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

1 ответ

В StackExchange был задан почти идентичный вопрос:

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

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


Топ проголосовал ответ:

Автозаполнение состоит из двух частей:

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

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

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

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

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

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