Какая польза от полной команды?


17

При запуске completeкоманды на моем терминале gnome он показывает некоторые команды. Что это? И какая польза от completeкоманды?

$ complete
complete -F _minimal 
complete -F _filedir_xspec oodraw
complete -F _filedir_xspec elinks
complete -F _filedir_xspec freeamp
complete -F _longopt split
complete -F _longopt sed
complete -F _longopt ld
complete -F _longopt grep
complete -F _service /etc/init.d/vboxweb-service
complete -F _service /etc/init.d/vboxballoonctrl-service
complete -F _service /etc/init.d/rc
complete -F _service /etc/init.d/nmbd
complete -F _service /etc/init.d/halt
complete -j -P '"%' -S '"' jobs
complete -d pushd

Список идет долго, поэтому я разместил некоторые из них.


1
Я пробовал команду 'man complete', но она ничего не отображает.
Авинаш Радж

2
попробуйтеhelp complete
Сильвен Пино

Ответы:


16

completeвстроенная функция bash Таким образом, в системе нет двоичного файла. Он управляет выполнением команд при нажатии tab.

Пример: если вы наберете:

user@host:~$ pidof <tab><tab>

... появляется список со всеми возможными значениями для этой команды. В данном случае это означает все запущенные процессы. Смотрите вывод completeфункции:

user@host:~$ complete | grep pidof
complete -F _pgrep pidof

Это означает, что функция _pgrep(-F) выполняется при добавлении команды pidof. Определение этой функции в /etc/bash_completion.d/procps.

Другой пример: если вы наберете:

user@host:~$ cd /usr/<tab><tab>
bin/     games/   include/ lib/     lib32/   local/   sbin/    share/   src/

... вы видите список папок, которые вы можете cdпод /usr/. Какая функция выполняется? greping на completeфункцию (как указано выше) говорит нам , что это funtction _cdв /etc/bash_completion.

Сделай сам : у тебя есть программа / скрипт, /bin/myprogи ты хочешь это, если ты выполняешь это следующим образом

user@host:~$ myprog /home/user/<tab><tab>

... он должен только перечислять папки, а не файлы. Поэтому продлите ваше завершение bash следующей командой:

user@host:~$ complete -F _cd myprog

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


Так вот, как завершение командной строки в git выглядит намного умнее, чем в большинстве программ ...
AShelly

8

completeэто команда bash, используемая для выполнения действия автозаполнения, когда пользователь TABнажимает клавишу в терминале.

Вызов только completeперечислит все функции, зарегистрированные для автоматического завершения команд или опций услуг.

Со страниц руководства по bash:

complete: complete [-abcdefgjksuv] [-pr] [-DE] [-o option] [-A action] [-G globpat]
          [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix]
          [-S suffix] [name ...]
    Specify how arguments are to be completed by Readline.

    For each NAME, specify how arguments are to be completed.  If no options
    are supplied, existing completion specifications are printed in a way that
    allows them to be reused as input.

    Options:
      -p    print existing completion specifications in a reusable format
      -r    remove a completion specification for each NAME, or, if no
        NAMEs are supplied, all completion specifications
      -D    apply the completions and actions as the default for commands
        without any specific completion defined
      -E    apply the completions and actions to "empty" commands --
        completion attempted on a blank line

    When completion is attempted, the actions are applied in the order the
    uppercase-letter options are listed above.  The -D option takes
    precedence over -E.

    Exit Status:
    Returns success unless an invalid option is supplied or an error occurs.

Установите этот флажок, /usr/share/bash-completion/bash_completionчтобы увидеть дополнения по умолчанию, которые поставляются с bash.

Посетите http://www.linuxjournal.com/content/more-using-bash-complete-command для полного руководства по этой команде.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.