Quelle est l'utilité de la commande complete?

17

Lors de l'exécution de la completecommande sur mon gnome-terminal, il affiche certaines commandes. Quelles sont-elles? Et à quoi sert le completecommandement?

$ 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

La liste est longue, j'ai donc posté certains d'entre eux.

Avinash Raj
la source
1
J'ai essayé la commande 'man complete' mais elle n'affiche rien.
Avinash Raj
2
essaihelp complete
Sylvain Pineau

Réponses:

16

completeest une fonction intégrée de bash. Il n'y a donc pas de binaire sur le système. Il gère la façon dont les commandes seront exécutées lorsque vous appuyez sur tab.

Exemple: si vous tapez:

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

... une liste apparaît avec toutes les valeurs possibles pour cette commande. Dans ce cas, cela signifie tous les processus en cours d'exécution. Voir la sortie de la completefonction:

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

Cela signifie que la fonction _pgrep(-F) est exécutée lors de la tabulation de la commande pidof. La définition de cette fonction est en /etc/bash_completion.d/procps.

Un autre exemple: si vous tapez:

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

... vous voyez la liste des dossiers que vous pouvez cdsous /usr/. Quelle fonction est exécutée? greping la completefonction (comme ci-dessus) nous dit que c'est la fonction _cddans /etc/bash_completion.

Faites-le vous - même : vous avez un programme / script appelé /bin/myproget vous le souhaitez si vous l'exécutez comme suit

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

... il ne doit lister que les dossiers, pas les fichiers. Étendez donc votre complétion bash avec la commande suivante:

user@host:~$ complete -F _cd myprog

C'est ça. Vous pouvez également écrire vos propres fonctions pour compléter des choses personnalisées, par exemple remplir uniquement des fichiers spécifiques ou des nombres ou des listes de valeurs statiques ...

le chaos
la source
C'est ainsi que l'achèvement de la ligne de commande de git semble tellement plus intelligent que la plupart des programmes ...
AShelly
8

completeest une commande bash utilisée pour effectuer l'action de saisie semi-automatique lorsque l'utilisateur appuie sur la TABtouche d'un terminal.

L'appel juste completelistera toutes les fonctions enregistrées pour l'achèvement automatique des commandes ou des options de services.

Depuis les pages de manuel 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.

Vérifiez /usr/share/bash-completion/bash_completionles compléments par défaut fournis avec bash.

Visitez http://www.linuxjournal.com/content/more-using-bash-complete-command pour un didacticiel complet sur cette commande.

Sylvain Pineau
la source