завершение bash, можно ли установить слово по умолчанию для первой вкладки на новой строке терминала

Вопрос или проблема

У меня есть контейнер, в котором оболочка запускает bash. В нем установлен bash completion, и он работает хорошо. Этот контейнер имеет много пользовательских CLI-команд, но их все нужно предварять nextcloud. Так что, если я напишу nex <tab>, nex достаточно уникален, чтобы завершиться.

Есть ли способ установить “умолчание” для завершения, когда я нахожусь на новой строке CLI (пустой), чтобы первый tab вставлял это значение по умолчанию, или мне было бы достаточно просто ввести nextcloud без tab?

Я искал “bash completion” и страницу man bash, а также справку по complete. Я немного поиграл с -D, -E, и по смыслу это кажется возможным, но я не вижу, как это сделать. Небольшая помощь?

https://opensource.com/article/18/3/creating-bash-completion-script

https://linux.die.net/man/1/bash (ищите по странице Completing)

complete: complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]
    Укажите, как аргументы должны завершаться с помощью Readline.
    
    Для каждого NAME укажите, как должны завершаться аргументы. Если опции не указаны,
    существующие спецификации завершения выводятся таким образом, что их можно
    повторно использовать в качестве ввода.
    
    Опции:
      -p    вывод существующих спецификаций завершения в повторно используемом формате
      -r    удалить спецификацию завершения для каждого NAME, или, если не указаны
            NAME, удалить все спецификации завершения
      -D    применить завершения и действия как умолчание для команд
            без каких-либо определенных завершений
      -E    применить завершения и действия к "пустым" командам --
            завершение, попытка на пустой строке
      -I    применить завершения и действия к начальному (обычно к
            команде) слову
    
    Когда осуществляется завершение, действия применяются в порядке, в котором
    перечислены выше опции с заглавными буквами. Если указано несколько опций,
    опция -D имеет приоритет над -E, а обе имеют приоритет над -I.
    
    Статус выхода:
    Возвращает успех, если не указана недопустимая опция или не произошла ошибка.

-W wordlist – это то, что вам нужно.

complete -E -W nextcloud

Вы также можете найти этот подход полезным: Bash “виртуальный” префикс терминала.

Ответ или решение

Вопрос о том, можно ли установить «умолчательное» слово для первого таба на новой строке терминала в среде bash с поддержкой завершения команд, является достаточно актуальным, особенно для пользователей, которые регулярно работают с кастомными CLI-командами. Ниже представлен полный ответ на этот вопрос с пошаговым объяснением и практическими рекомендациями.

Установка умолчательного слова для завершения команд в Bash

Контекст задачи

Вы работаете в контейнере с установленным Bash, в котором поддержка завершения команд активирована. У вас есть несколько пользовательских команд, которые требуют префикса nextcloud. Ваша цель – автоматизировать процесс ввода этой команды, чтобы она автоматически вставлялась при нажатии клавиши Tab, или даже просто при открытии новой строки терминала.

Использование опций complete

Bash предоставляет несколько опций для настройки поведения завершения команд. В вашем случае наиболее актуальными являются опции -E, -D и -I:

  • -E: Применяет завершения и действия к «пустым» командам (когда строка пустая).
  • -D: Применяет завершения и действия как умолчательные для команд, для которых не определено конкретное завершение.
  • -I: Применяет завершения и действия к начальному (обычно командному) слову.

Для вашей задачи вы можете использовать комбинацию этих опций, а именно -E для применения завершения к пустым командам.

Пример команды

Чтобы установить nextcloud как умолчательное слово при завершении, можно использовать следующую команду:

complete -E -W 'nextcloud'

Эта команда установит nextcloud как предложение при попытке завершения команды, когда строка терминала будет пустой.

Добавление в конфигурационный файл

Чтобы это поведение сохранялось при каждом запуске терминала, добавьте указанную команду в файл инициализации Bash, например, в файл ~/.bashrc:

echo "complete -E -W 'nextcloud'" >> ~/.bashrc

После добавления команды в файл вам нужно будет перезагрузить Bash или выполнить команду source ~/.bashrc, чтобы изменения вступили в силу.

Заключение

Теперь при открытии нового терминала, если вы просто нажмете Tab, Баш автоматически вставит nextcloud. Это значительно упростит работу с вашими кастомными командами и уменьшит количество ошибок при вводе.

Если у вас есть дополнительные вопросы или нужны дальнейшие разъяснения, не стесняйтесь обращаться за помощью. Важно помнить, что правильная настройка процессов завершения команд может значительно повысить производительность вашей работы в Bash.

Оцените материал
Добавить комментарий

Капча загружается...