获取shell脚本中的函数名称列表

我有一个具有多个功能的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

如果您不想在帮助中显示“私人”功能,请省略“功能”部分:

my_private_function()

{

# Do something

}

以上是 获取shell脚本中的函数名称列表 的全部内容, 来源链接: utcz.com/qa/427937.html

回到顶部