Was nützt ein vollständiger Befehl?

17

Während der Ausführung des completeBefehls auf meinem Gnome-Terminal werden einige Befehle angezeigt. Was sind sie? Und was nützt der completeBefehl?

$ 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

Liste geht lang, also gab ich einige von ihnen bekannt.

Avinash Raj
quelle
1
Ich habe versucht, das Kommando 'man complete' auszuführen, aber es zeigt nichts an.
Avinash Raj
2
versuchenhelp complete
Sylvain Pineau

Antworten:

16

completeist eine eingebaute Bash-Funktion. Es gibt also keine Binärdatei auf dem System. Hier wird festgelegt, wie Befehle beim Drücken von ausgeführt werden tab.

Beispiel: Wenn Sie Folgendes eingeben:

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

... erscheint eine Liste mit allen möglichen Werten für diesen Befehl. In diesem Fall sind alle laufenden Prozesse gemeint. Siehe die Ausgabe der completeFunktion:

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

Dies bedeutet, dass die Funktion _pgrep(-F) beim Aufrufen des Befehls ausgeführt wird pidof. Die Definition dieser Funktion ist in /etc/bash_completion.d/procps.

Ein weiteres Beispiel: Wenn Sie Folgendes eingeben:

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

... sehen Sie die Liste der Ordner cd, unter denen Sie sich befinden können /usr/. Welche Funktion wird ausgeführt? Greping die completeFunktion (wie oben) sagt uns, es ist die Funktion _cdin /etc/bash_completion.

Mach es selbst : Du hast ein Programm / Skript aufgerufen /bin/myprogund das willst du, wenn du es wie folgt ausführst

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

... sollte nur Ordner auflisten, keine Dateien. So verlängern Sie Ihre Bash-Vervollständigung mit dem folgenden Befehl:

user@host:~$ complete -F _cd myprog

Das ist es. Sie können auch eigene Funktionen schreiben, um benutzerdefinierte Dinge zu vervollständigen, z. B. nur bestimmte Dateien oder Nummern oder Listen mit statischen Werten ...

Chaos
quelle
Auf diese Weise scheint die Befehlszeilen-Vervollständigung von Git so viel intelligenter zu sein als die der meisten Programme ...
AShelly,
8

completeist ein Bash-Befehl, mit dem die automatische Vervollständigung ausgeführt wird, wenn der Benutzer die TABTaste in einem Terminal drückt.

Beim Aufruf von just completewerden alle Funktionen aufgelistet, die für die automatische Vervollständigung von Befehlen oder Dienstoptionen registriert sind.

Aus den Bash-Manpages:

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.

Überprüfen Sie /usr/share/bash-completion/bash_completion, ob die mit bash gelieferten Standardabschlüsse vorhanden sind.

Besuchen Sie http://www.linuxjournal.com/content/more-using-bash-complete-command, um eine vollständige Anleitung zu diesem Befehl zu erhalten.

Sylvain Pineau
quelle