我有一个具有多个功能的Bourne Shell脚本,并允许以以下方式调用:
my.sh <func_name> <param1> <param2>
在内部,func_name()将用param1和调用param2。
func_name()
param1
param2
我想创建一个help仅列出所有可用函数的函数,即使没有参数也是如此。
help
问题:如何从脚本内部获取脚本中所有函数名称的列表?
我想避免不得不解析它并寻找功能模式。太容易出错。
更新:代码。希望我的help()功能像main()-添加到代码中的功能会自动添加到帮助中。
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
如果您不想在帮助中显示“私人”功能,请省略“功能”部分:
my_private_function() { # Do something }