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

10

При запуске команды 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

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

    
задан Avinash Raj 04.04.2014 в 06:24
источник

2 ответа

11

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

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

[email protected]:~$ pidof <tab><tab>

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

[email protected]:~$ complete | grep pidof
complete -F _pgrep pidof

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

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

[email protected]:~$ cd /usr/<tab><tab>
bin/     games/   include/ lib/     lib32/   local/   sbin/    share/   src/

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

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

[email protected]:~$ myprog /home/user/<tab><tab>

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

[email protected]:~$ complete -F _cd myprog

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

    
ответ дан chaos 04.04.2014 в 08:17
источник
6

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.

Посетите Ссылка для полного руководства об этой команде.

    
ответ дан Sylvain Pineau 04.04.2014 в 07:18