Понять встроенную команду `compgen`

37

От 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.

Итак, что [-abcdefgjksuv]означает варианты ?

Другими словами, я хочу знать, как использовать все варианты.

Pandya
источник
Вы читали справочную страницу? man compgen, Страница man предназначена для встроенных командных оболочек, поэтому вам придется прокрутить вниз до compgen.
garethTheRed
5
"man compgen" не существует. использовать "Man Bash"
Кевинф

Ответы:

38

Опции для compgenкоманды такие же, как complete, кроме -pи -r. С compgenman-страницы:

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

Для вариантов [abcdefgjksuv]:

  • -a означает имена псевдонима
  • -b означает имена встроенных оболочек
  • -c означает имена всех команд
  • -d означает имена каталогов
  • -e означает имена экспортированных переменных оболочки
  • -f означает имена файлов и функций
  • -g означает имена групп
  • -j означает имена работы
  • -k означает Имена зарезервированных слов Shell
  • -s означает названия службы
  • -u означает имена пользователей userAlias
  • -v означает имена переменных оболочки

Вы можете увидеть полную справочную страницу здесь .

cuonglm
источник
@Pandya: Смотрите параметры для complete, это так же, как compgen, кроме -pи -r.
Cuonglm
Я прочитал это от man bashи предложил редактировать, чтобы закончить Ваш пост так, чтобы я легко согласился.
Пандя
1
Любая информация о том, как использовать compgen -G? Скажем, мой шаблон compgen -G '*.zip'и у меня есть файл "foo.zip". compgen найдет foo.zip, но что, если пользователь уже набрал «b». Теперь compgen ничего не должен найти. Если я дам команду compgen -G '*.zip' "b", compgen все равно найдет foo.zip
Эдвард Фальк,
@cuonglm Как перечислить функции, предоставляемые командой service? Например, используя service networkingи нажав вкладку вернется force-reload reload restart start stop. Вы знаете, как заставить их использовать compgen?
Илья Ростовцев
@IliaRostovtsev: посмотрите это, например, github.com/scop/bash-completion/blob/…
cuonglm