Zrozum wbudowane polecenie `compgen`

36

Od help compgen:

$ help compgen
compgen: compgen [-abcdefgjksuv] [-o option]  [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]
    Display possible completions depending on the options.

    Intended to be used from within a shell function generating possible
    completions.  If the optional WORD argument is supplied, matches against
    WORD are generated.

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

Czym więc są opcje [-abcdefgjksuv]?

Innymi słowy, chcę wiedzieć, jak korzystać ze wszystkich opcji.

Pandya
źródło
Czy przeczytałeś stronę man? man compgen. Strona podręcznika dotyczy wbudowanych powłok, więc musisz przewinąć w dół do compgen.
garethTheRed
5
„man compgen”, nie istnieje. użyj „man bash”
kevinf

Odpowiedzi:

38

Opcje compgenpolecenia są takie same jak complete, z wyjątkiem -pi -r. Ze compgenstrony podręcznika:

compgen
 compgen [option] [word]
 Generate possible completion matches for word according to the options, which 
 may be any option accepted by the complete builtin with the exception of -p 
 and -r, and write the matches to the standard output

Dla opcji [abcdefgjksuv]:

  • -a oznacza nazwy aliasu
  • -b oznacza nazwy wbudowanych powłok
  • -c oznacza nazwy wszystkich poleceń
  • -d oznacza nazwy katalogu
  • -e oznacza nazwy eksportowanych zmiennych powłoki
  • -f oznacza nazwy plików i funkcji
  • -g oznacza nazwy grup
  • -j oznacza nazwy pracy
  • -k oznacza Nazwy zastrzeżone słów Shell
  • -s oznacza nazwy usług
  • -u oznacza Nazwy nazw użytkownikówAlias
  • -v oznacza nazwy zmiennych powłoki

Możesz zobaczyć pełną stronę man tutaj .

Cuonglm
źródło
@ Pandya: Zobacz opcje dla complete, jest taki sam jak compgen, z wyjątkiem -pi -r.
cuonglm,
Przeczytałem go man bashi zasugerowałem edycję, aby ukończyć wpis, aby łatwo go zaakceptować.
Pandya,
1
Wszelkie informacje na temat korzystania compgen -G? Powiedz, że mam wzór compgen -G '*.zip'i mam plik „foo.zip”. compgen znajdzie foo.zip, ale co jeśli użytkownik już wpisał „b”. Teraz compgen nie powinien niczego znaleźć. Jeśli dam polecenie compgen -G '*.zip' "b", compgen nadal znajdzie foo.zip
Edward Falk
@cuonglm Jak wyświetlić listę funkcji udostępnianych przez polecenie serwisowe? Na przykład użycie service networkingi naciśnięcie klawisza wróci force-reload reload restart start stop. Czy wiesz, jak je wykorzystać compgen?
Ilia Rostovtsev,
@IliaRostovtsev: patrz ten na przykład github.com/scop/bash-completion/blob/…
cuonglm