Як вказати спеціальне автозаповнення для конкретних команд?


25

Чи є спосіб, коли баш точно знати, що відображати при подвійному вкладці? Наприклад, у мене є сценарій python, scpyякий вимагає пари аргументів. Наприклад, як apt-get, якщо подвійний вкладку дає вам

autoclean build-dep чистий dselect-upgrade оновлення джерела очищення
autoremove перевірити dist-upgrade встановити видалити оновлення  

Чи є спосіб зробити це для власних скриптів / програм? Чи потрібно обгорнути свій скрипт python в скрипті bash?

Відповіді:


31

Найпростіший спосіб зробити це - включити сценарій оболонки в /etc/bash_completion.d/. Основна структура цього файлу - це проста функція, яка виконує завершення, а потім виклик completeякої - вбудований баш. Замість того, щоб розбиратися в деталях щодо використання complete, я пропоную вам прочитати Вступ до завершення Bash . Частина 1 охоплює основи, а частина 2 пояснює, як ви б вирішили написати сценарій завершення.

Більш щільний опис завершення башів можна знайти в розділі "Програмоване завершення" man bash(ви можете ввести "/ Програмоване завершення", а потім кілька разів натиснути "n", щоб швидко дістатися. Або, якщо ви відчуваєте удачу "g 2140 ПОВЕРНЕННЯ ").


8

Ось основний довідник.

Нехай є приклад сценарію під назвою 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

Джерело: /ubuntu//a/483149/24155


3
"Повний підручник" - це не фраза, яку я б використовував для опису цього ...
searchchengine27
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.