Как мне перечислить функции, определенные в моей оболочке?

137

Я могу ввести псевдоним, чтобы отобразить список всех псевдонимов.

Но для функций все, что я могу сделать, это grep my .bash_profile.

Это только те, что содержатся в этом файле, а не те, которые определены в вспомогательных файлах или динамически.

Есть ли более удобный способ узнать, какие функции в настоящее время определены?

  • 0
    Возможный дубликат получения списка имен функций в скрипте оболочки
  • 2
    @AlastairIrvine Спасибо за дублирование номинации; однако, я решил это наоборот. Этот вопрос имеет значительно больше взглядов и голосов, а также более широкий выбор ответов; и принятый ответ на вашем назначенном дубликате явно неясен и, возможно, просто неверен.
Теги:
function

6 ответов

186
Лучший ответ

Названия функций и определения могут быть перечислены с опцией -f для declare встроенная команда (см. Bash Встроенные устройства). Параметр -f для declareбудут перечислены только имена функций (и, возможно, исходный файл и номер строки).

Bash Справочное руководство

  • 1
    в GNU bash 4.3.46 (1) -релиз (x86_64-pc-linux-gnu) -F перечисляет имена / -f перечисляет всю функцию
  • 1
    Чтобы получить «необязательный» исходный файл / строку #, кажется, что вы должны включить extdebug ( shopt -s extdebug ) И предоставить одно или несколько имен функций для команды declare -F . IOW, declare -F не предоставляет имена файлов / строк #, даже когда включен extdebug, что не ясно из документации и не является особенно интуитивным, IMO.
Показать ещё 1 комментарий
69

Предполагая bash shell:

typeset -f

перечислит функции.

typeset -f

будут перечислены только имена функций.

  • 6
    Мой bash v4.1.17 (9) -релиз говорит: устарел Obsolete. See `help declare'.
  • 5
    Еще приятно знать, что это синоним.
40
declare -F

предоставит вам имена всех функций

type function_name

предоставит вам источник для определенной функции

  • 1
    Или просто используйте объявление -f (строчные буквы) для источника
32

declare -F действительно печатает объявления команд, а не только имена функций:

$ declare -F
declare -f function1
declare -f function2

Вы можете использовать compgen -A function для печати только имен функций:

$ compgen -A function
function1
function2
  • 5
    compgen -A function была именно то, что я искал.
  • 2
    Ницца! В моем случае я хотел использовать псевдонимы ... вы можете получить псевдонимы и функции с compgen -a -A function функции compgen -a -A function
Показать ещё 1 комментарий
22

набор устарел, используйте:

declare -f

или

declare -f function_name

или

type function_name
1
set | grep " ()"

Вместо grep вы также можете использовать fgrep или hgrep (hgrep - мой личный фаворит, он grep, но он приветствует результат grep-ped.

hgrep можно найти здесь: ACME Labs hgrep

  • 1
    Это будет список функций, а также переменных, которые имеют `()` в значении
  • 2
    @AloisMahdal Вот тот, который работает: set | grep " () $" | cut -d' ' -f1 . Но это слишком сложно по сравнению с другими ответами.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню