Как узнать, какие аргументы ожидает команда и ожидает ли она ввода файла? Как он узнает, какие команды доступны?
Практически идентичный вопрос задавался в StackExchange:
Я тратил много времени на в последнее время, и мне интересно, как работает автозаполнение вкладки. Какой механизм стоит за этим? Как bash знает содержимое каждого каталога?
blockquote>
Ответ с наибольшим количеством голосов:
Есть два этапа автозаполнения:
[ 1115]
[ 1124] Вы можете перечислить существующие дополнения, определенные в вашей текущей среде bash, используя простоБиблиотека readline, как уже упоминалось в fixje, управляет редактированием командной строки и вызывает нажатие на bash при нажатии клавиши tab для включения завершения. Затем Bash дает (см. Следующий пункт) список возможных дополнений и readline вставляет столько символов, сколько однозначно идентифицируется уже набранными символами. (Вы можете настроить библиотеку 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
; все они получены из [ 118].