Как добавить / найти параметры пользовательской исполняемой программы

Предположим, у меня есть простой скрипт в /usr/local/bin/myscript, такой как

#!/bin/bash case "$1" in start) start something ;; stop) stop something ;; status) status of something ;; *) echo "unknown option $1" esac

Как и где я могу предоставить эти три параметра start / stop / status, чтобы пользователь мог отображать / автозаполнять их нажатием TAB?

Как, например, apt-get + 2x Tab дает мне

autoclean check dselect-upgrade source autoremove clean install update build-dep dist-upgrade purge upgrade changelog download remove

EDIT

Как было сказано @Ravexina, я добавил файл в /etc/bash_completion.d/myscript_comp, подобный

_my_script_comp () { local cur # A pointer named "cur" to current completion word. COMPREPLY=() # Array variable storing the possible completions. cur=${COMP_WORDS[COMP_CWORD]} # Show it for every possible combination # we could do "s*" to only complete words starting with "s" case "$cur" in # Generate the completion matches and load them into $COMPREPLY array. *) COMPREPLY=( $( compgen -W 'start status stop' -- $cur ) );; esac return 0 } complete -F _my_script_comp myscript

Но когда я набираю myscript и нажимаю 2x TAB, теперь я получаю все файлы, перечисленные в текущем каталоге, а не start stop status ...

1
задан 30 June 2017 в 13:08

3 ответа

Создайте файл здесь:

/etc/bash_completion.d/

назовите его, как хотите, например: myscript.

Добавьте эти строки в него и сохраните его:

_my_script_comp ()
{
  local cur # A pointer named "cur" to current completion word.
  COMPREPLY=() # Array variable storing the possible completions.
  cur=${COMP_WORDS[COMP_CWORD]}

  # Show it for every possible combination
  # we could do "s*" to only complete words starting with "s"
  case "$cur" in
    # Generate the completion matches and load them into $COMPREPLY array.
    *)  COMPREPLY=( $( compgen -W 'start status stop' -- $cur ) );;
  esac

  return 0
}

complete -F _my_script_comp script.sh

Теперь у вас есть завершение bash для /usr/local/bin/script.sh.

Мой источник.

2
ответ дан 22 May 2018 в 21:00
  • 1
    Привет, спасибо! Пожалуйста, взгляните на мое Редактирование. К сожалению, он все еще не работает – derHugo 30 June 2017 в 12:48
  • 2
    Возможно, вы захотите загрузить файл, запустите source /etc/bash_completion.d/* – Sergiy Kolodyazhnyy 30 June 2017 в 12:56
  • 3
    Я обновил ответ ... проверьте его снова. – Ravexina 30 June 2017 в 12:56
  • 4
    И как @SergiyKolodyazhnyy предлагает либо источник сценария, либо открыть новый терминал, чтобы увидеть, работает ли он или нет. – Ravexina 30 June 2017 в 12:57
  • 5
    Я применил ваши изменения и сделал то, что сказал @ СергейГолодянный, но он все еще не работает. Даже после перезагрузки – derHugo 30 June 2017 в 13:01

Создайте файл здесь:

/etc/bash_completion.d/

назовите его, как хотите, например: myscript.

Добавьте эти строки в него и сохраните его:

_my_script_comp () { local cur # A pointer named "cur" to current completion word. COMPREPLY=() # Array variable storing the possible completions. cur=${COMP_WORDS[COMP_CWORD]} # Show it for every possible combination # we could do "s*" to only complete words starting with "s" case "$cur" in # Generate the completion matches and load them into $COMPREPLY array. *) COMPREPLY=( $( compgen -W 'start status stop' -- $cur ) );; esac return 0 } complete -F _my_script_comp script.sh

Теперь у вас есть завершение bash для /usr/local/bin/script.sh.

Мой источник.

2
ответ дан 18 July 2018 в 10:53

Создайте файл здесь:

/etc/bash_completion.d/

назовите его, как хотите, например: myscript.

Добавьте эти строки в него и сохраните его:

_my_script_comp () { local cur # A pointer named "cur" to current completion word. COMPREPLY=() # Array variable storing the possible completions. cur=${COMP_WORDS[COMP_CWORD]} # Show it for every possible combination # we could do "s*" to only complete words starting with "s" case "$cur" in # Generate the completion matches and load them into $COMPREPLY array. *) COMPREPLY=( $( compgen -W 'start status stop' -- $cur ) );; esac return 0 } complete -F _my_script_comp script.sh

Теперь у вас есть завершение bash для /usr/local/bin/script.sh.

Мой источник.

2
ответ дан 24 July 2018 в 19:40

Другие вопросы по тегам:

Похожие вопросы: