Как работает автозаполнение терминалов 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
,