Как указать пользовательский автозаполнение для определенных команд?

Есть ли способ, чтобы знать, что показывать, когда вы дважды используете вкладку? Например, у меня есть скрипт python scpy который требует пару аргументов. Например, например apt-get , если вы дважды используете вкладку,

 очистить очиститель для очистки от сбоев autoclean-dselect-upgrade
 autoremove check dist-upgrade install удалить обновление  

Есть ли способ сделать это для ваших собственных скриптов / программ? Нужно ли мне обернуть мой скрипт python в сценарий bash?

Самый простой способ сделать это – включить скрипт оболочки в /etc/bash_completion.d/ . Основная структура этого файла – это простая функция, которая выполняет завершение, а затем вызывает complete набор, который является встроенным bash. Вместо того, чтобы подробно рассказывать о том, как использовать complete , я предлагаю вам прочитать «Введение в Bash Completion» . Часть 1 посвящена основам, а часть 2 посвящена тому, как вы собираетесь писать сценарий завершения.

Более плотное описание завершения bash можно найти в разделе «Программируемое завершение» man bash (вы можете набрать «/ Programmable Completion», а затем нажать «n» несколько раз, чтобы быстро добраться. Или, если вам повезло, "g 2140 RETURN").

Вот основное руководство.

Давайте рассмотрим пример сценария под названием admin.sh, к которому вы хотели бы иметь работу автозаполнения.

 #!/bin/bash while [ $# -gt 0 ]; do arg=$1 case $arg in option_1) # do_option_1 ;; option_2) # do_option_1 ;; shortlist) echo option_1 option_2 shortlist ;; *) echo Wrong option ;; esac shift done 

Примечание. Вызывающий скрипт с этим параметром распечатает все возможные варианты для этого скрипта.

И здесь у вас есть сценарий автозаполнения:

 _script() { _script_commands=$(/path/to/your/script.sh shortlist) local cur prev COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" COMPREPLY=( $(compgen -W "${_script_commands}" -- ${cur}) ) return 0 } complete -o nospace -F _script ./admin.sh 

Обратите внимание, что последний аргумент для завершения – это имя скрипта, к которому вы хотите добавить автозаполнение. Все, что вам нужно сделать, это добавить скрипт автозаполнения в bashrc как

 source /path/to/your/autocomplete.sh 

или скопировать его в /etc/bash.completion.d

Источник: https://askubuntu.com/a/483149/24155