Получите список имен функций в сценарии оболочки [дубликат]

8
задан Benjamin W. 22 April 2019 в 12:50
поделиться

2 ответа

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

$ cat my.sh
#!/bin/sh

function func1() # Short description
{
    echo func1 parameters: $1 $2
}

function func2() # Short description
{
    echo func2 parameters: $1 $2
}

function help() # Show a list of functions
{
    grep "^function" $0
}

if [ "_$1" = "_" ]; then
    help
else
    "$@"
fi

Вот интерактивная демонстрация:

$ my.sh 
function func1() # Short description
function func2() # Short description
function help() # Show a list of functions


$ my.sh help
function func1() # Short description
function func2() # Short description
function help() # Show a list of functions


$ my.sh func1 a b
func1 parameters: a b

$ my.sh func2 x y
func2 parameters: x y

Если у вас есть «частная» функция, которую вы не хотите отображать в справке, опустите часть «функция»:

my_private_function()
{
    # Do something
}
15
ответ дан 5 December 2019 в 05:34
поделиться

Лучше всего сделать массив (вы используете bash), содержащий функции, которые вы хотите рекламировать, и попросить вашу функцию помощи перебирать и выводить их.

Вызов set в одиночку выведет функции, но в полном объеме. Вам все равно придется разбирать его в поисках вещей, заканчивающихся на (), чтобы получить пресловутые символы.

Также, вероятно, разумнее использовать что-то вроде getopt, чтобы превратить --function-name в function_name с аргументами. Но, в общем, здравомыслие относительно, а вы не выложили код :)

Другой вариант - создать loadable для bash (форк set), который это сделает. Честно говоря, я бы предпочел использовать парсинг, прежде чем писать загружаемый файл для этой задачи.

1
ответ дан 5 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

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