Собирает список имен функций, соответствующих любому из списка шаблонов:
functions=$(for c in $patterns; do compgen -A function | grep "^$c\$")
grep ограничивает вывод только точными совпадениями для шаблонов.
Проверьте команду bash type как лучшую альтернативу следующему. Спасибо Чарльзу Даффи за подсказку.
Следующее использует это для ответа на вопрос о названии для людей, а не для сценариев оболочки: оно добавляет список имен функций, соответствующих заданным шаблонам, в обычный список which
сценариев оболочки, чтобы ответить: «Какой код выполняется, когда Я набираю команду? "
which() {
for c in "$@"; do
compgen -A function |grep "^$c\$" | while read line; do
echo "shell function $line" 1>&2
done
/usr/bin/which "$c"
done
}
Итак,
(xkcd)Sandy$ which deactivate
shell function deactivate
(xkcd)Sandy$ which ls
/bin/ls
(xkcd)Sandy$ which .\*run_hook
shell function virtualenvwrapper_run_hook
Возможно, это нарушение философии Unix "сделать одну вещь", но я не раз отчаялся, потому что which
не нашел команду, которую должен был содержать какой-либо пакет, я забыл о функциях оболочки Я поместил это в свой .profile.