Есть ли способ, чтобы знать, что показывать, когда вы дважды используете вкладку? Например, у меня есть скрипт 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