Как определить завершение для имени функции "шаблон"?
У меня есть несколько функций, работающих только с каталогами, все имена функций следуют этому шаблону (оканчиваясь на _dir):
something_dir () { ... }
something_else_dir() { ... }
...
И для всех этих я определяю завершение:
complete -A directory something_dir something_else_dir ...
Можно ли определить завершение для всех функций автоматически, чтобы каждая новая функция, заканчивающаяся на _dir, выполняла только каталоги?
1 ответ
Использование compgen -A function
перечислить все функции; затем grep -E '.*_dir$'
отфильтровать функции, заканчивающиеся на _dir
,
complete -A directory $(compgen -A function | grep -E '.*dir$')
Это предполагает, что все имена функций заканчиваются на _dir
свободны от специальных символов, таких как *
и пробелы. Согласно спецификации, это всегда должно быть так.
Эта команда настроит завершение только для уже существующих функций. Чтобы автоматически добавить завершение для функций, которые вы определите в интерактивном сеансе, добавьте команду в PROMPT_COMMAND
так что он будет выполняться при каждом запросе.
PROMPT_COMMAND="complete -A directory \$(compgen -A function | grep -E '.*dir$')"