Memahami perintah `compgen` builtin

37

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

Jadi, apa [-abcdefgjksuv]artinya singkatan?

Dengan kata lain saya ingin tahu cara menggunakan semua opsi.

Pandya
sumber
Sudahkah Anda membaca halaman manual? man compgen. Halaman manual untuk shell builtins, jadi Anda harus menggulir ke bawah compgen.
garethTheRed
5
"man compgen", tidak ada. gunakan "man bash"
kevinf

Jawaban:

38

Opsi untuk compgenperintah sama dengan complete, kecuali -pdan -r. Dari compgenhalaman 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

Untuk opsi [abcdefgjksuv]:

  • -a berarti Nama alias
  • -b berarti Nama shell bawaan
  • -c berarti Nama semua perintah
  • -d berarti Nama direktori
  • -e berarti Nama variabel shell yang diekspor
  • -f berarti Nama file dan fungsi
  • -g berarti Nama grup
  • -j berarti Nama pekerjaan
  • -k berarti Nama dari kata-kata milik Shell
  • -s berarti Nama layanan
  • -u berarti Nama-nama nama userAlias
  • -v berarti Nama variabel shell

Anda dapat melihat halaman manual lengkap di sini .

cuonglm
sumber
@ Pandya: Lihat opsi untuk complete, itu sama dengan compgen, kecuali -pdan -r.
cuonglm
Saya sudah membacanya man bashdan menyarankan edit untuk menyelesaikan posting Anda sehingga saya mudah menerimanya.
Pandya
1
Adakah informasi tentang cara menggunakan compgen -G? Katakan pola saya compgen -G '*.zip'dan saya punya file "foo.zip". compgen akan menemukan foo.zip, tetapi bagaimana jika pengguna telah mengetikkan 'b'. Sekarang, compgen seharusnya tidak menemukan apa pun. Jika saya memberi perintah compgen -G '*.zip' "b", compgen masih menemukan foo.zip
Edward Falk
@cuonglm Bagaimana mendaftar fungsi yang disediakan oleh perintah layanan? Misalnya, menggunakan service networkingdan menekan tab akan kembali force-reload reload restart start stop. Apakah Anda tahu cara menggunakannya compgen?
Ilia Rostovtsev
@IliaRostovtsev: lihat ini misalnya github.com/scop/bash-completion/blob/…
cuonglm