Подтвердить что ты не робот

Как работает вкладка bash?

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

4b9b3361

Ответ 1

В автозаполнение входят две части:

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

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

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

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

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

Ответ 2

Если вас интересуют основы: Bash использует readline, который содержит историю и базовое завершение. Вы можете проверить источник, если хотите получить подробное понимание. Кроме того, вы можете использовать readline для создания собственных интерфейсов CLI с завершением