我有一个 Bourne Shell 脚本,里面有几个函数,可以通过以下方式调用:
my.sh <func_name> <param1> <param2>
在内部,func_name()
将使用 param1
和 param2
调用。
我想创建一个 help
函数,它只列出所有可用的函数,即使没有参数。
问题:如何从脚本内部获取脚本中所有函数名称的列表?
我想避免解析它并寻找函数模式。太容易出错了。
更新:代码。希望我的 help()
函数像 main()
- 添加到代码中的函数会自动添加到帮助中。
#!/bin/sh
# must work with "set -e"
foo ()
{
echo foo: -$1-$2-$3-
return 0
}
# only runs if there are parameters
# exits
main ()
{
local cmd="$1"
shift
local rc=0
$cmd "$@" || rc=$?
exit $rc
}
if [[ "$*" ]]
then
main "$@"
die "how did we get here?"
fi
您可以在自己的脚本上使用 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
如果您有不想在帮助中显示的“私有(private)”功能,则省略“功能”部分:
my_private_function()
{
# Do something
}