Список определенных функций в Bash

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

Определение кандидатов требует знания, какие функции определяются. Легко перечислить определенные переменные в ударе с помощью только расширение параметра:

$ prefix_foo="one"
$ prefix_bar="two"
$ echo "${!prefix_*}"
prefix_bar prefix_foo

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

Существует ли Правильный Путь?

16
задан codeforester 29 April 2017 в 23:24
поделиться

7 ответов

Как насчет compgen :

compgen -A function   # compgen is a shell builtin
29
ответ дан 30 November 2019 в 15:56
поделиться

У меня есть запись в моем .bashrc , которая гласит:

alias list='declare -F |cut -d" " -f3'

Что позволяет мне набирать список и получите список функций. Когда я добавил это, я, наверное, понял, что происходит, но я не могу вспомнить, чтобы спасти свою жизнь в данный момент.

Удачи,

- джед

5
ответ дан 30 November 2019 в 15:56
поделиться

Pure Bash:

saveIFS="$IFS"
IFS=$'\n'
funcs=($(declare -F))      # create an array
IFS="$saveIFS"
funcs=(${funcs[@]##* })    # keep only what's after the last space

Затем запустите в командной строке Bash в качестве примера, отображающего функции завершения bash:

$ for i in ${funcs[@]}; do echo "$i"; done
__ack_filedir
__gvfs_multiple_uris
_a2dismod
. . .
$ echo ${funcs[42]}
_command
1
ответ дан 30 November 2019 в 15:56
поделиться

Один (уродливый) подход - использовать grep для вывода set:

set \
  | egrep '^[^[:space:]]+ [(][)][[:space:]]*$' \
  | sed -r -e 's/ [(][)][[:space:]]*$//'

Приветствуются лучшие подходы.

1
ответ дан 30 November 2019 в 15:56
поделиться
$ declare -F
declare -f ::
declare -f _get_longopts
declare -f _longopts_func
declare -f _onexit
...

Итак, псевдоним Джеда Дэниела,

declare -F | cut -d" " -f3

сокращает пробел и повторяет 3-е поле:

$ declare -F | cut -d" " -f3
::
_get_longopts
_longopts_func
_onexit
7
ответ дан 30 November 2019 в 15:56
поделиться

Используйте встроенную функцию declare для списка определенных функций:

declare -F
1
ответ дан 30 November 2019 в 15:56
поделиться

Возможно, мое решение для этой темы подойдет вам. Google для "получить список имен функций в сценарии оболочки site: stackoverflow.com"

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

0
ответ дан 30 November 2019 в 15:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: