Entender o comando embutido `compgen`

37

De 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.

Então, o que significa opções [-abcdefgjksuv]?

Em outras palavras, quero saber como usar todas as opções.

Pandya
fonte
Você leu a página de manual? man compgen. A página de manual é dos componentes internos do shell, então você terá que rolar para baixo compgen.
precisa
5
"man compgen", não existe. use "man bash"
kevinf 11/09/2015

Respostas:

38

As opções de compgencomando são as mesmas que complete, exceto -pe -r. Na compgenpágina do manual:

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

Para opções [abcdefgjksuv]:

  • -a significa nomes de alias
  • -b significa nomes de shell builtins
  • -c significa nomes de todos os comandos
  • -d significa nomes do diretório
  • -e significa nomes de variáveis ​​de shell exportadas
  • -f significa nomes de arquivo e funções
  • -g significa nomes de grupos
  • -j significa nomes de trabalho
  • -k significa nomes de palavras reservadas da Shell
  • -s significa nomes de serviço
  • -u significa nomes de nomes de userAlias
  • -v significa nomes de variáveis ​​de shell

Você pode ver a página de manual completa aqui .

cuonglm
fonte
@ Pandya: Veja as opções para complete, é o mesmo que compgen, exceto -pe -r.
cuonglm
Eu li man bashe sugeri editar para concluir sua postagem, para que eu aceite facilmente.
Pandya
1
Alguma informação sobre como usar compgen -G? Digamos que meu padrão seja compgen -G '*.zip'e eu tenho o arquivo "foo.zip". O compgen encontrará foo.zip, mas e se o usuário já tiver digitado 'b'. Agora, compgen não deve encontrar nada. Se eu der o comando compgen -G '*.zip' "b", compgen ainda encontra foo.zip
Edward Falk
@cuonglm Como listar as funções fornecidas pelo comando service? Por exemplo, usar service networkinge pressionar a guia retornará force-reload reload restart start stop. Você sabe como fazer isso compgen?
Ilia Rostovtsev
@IliaRostovtsev: veja este por exemplo github.com/scop/bash-completion/blob/…
cuonglm