Вы можете получить список функций в вашем скрипте, используя команду 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
}
Лучше всего сделать массив (вы используете bash), содержащий функции, которые вы хотите рекламировать, и попросить вашу функцию помощи перебирать и выводить их.
Вызов set
в одиночку выведет функции, но в полном объеме. Вам все равно придется разбирать его в поисках вещей, заканчивающихся на (), чтобы получить пресловутые символы.
Также, вероятно, разумнее использовать что-то вроде getopt
, чтобы превратить --function-name
в function_name
с аргументами. Но, в общем, здравомыслие относительно, а вы не выложили код :)
Другой вариант - создать loadable для bash (форк set
), который это сделает. Честно говоря, я бы предпочел использовать парсинг, прежде чем писать загружаемый файл для этой задачи.