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

标签 linux shell sh

<分区>

我有一个 Bourne Shell 脚本,里面有几个函数,可以通过以下方式调用:

my.sh <func_name> <param1> <param2>

在内部,func_name() 将使用 param1param2 调用。

我想创建一个 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
}

关于linux - 获取 shell 脚本中的函数名称列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2630812/

相关文章:

unix - 查找,不包括 dir,不下降到 dir,并且使用 maxdepth 和 mindepth

bash - 如何忽略通过命令内置调用的命令失败?

linux - 你如何找到哪些文件在linux ubuntu的哪个分区上

java - 如何使用 Java 通过 Windows/cygwin 执行 unix 命令

bash - sh 中的 "${0%/*}"和 "${0##*/}"

linux - 在Linux中计算多个csv文件中的行和文本字符串并通过管道传输到csv文件

linux - 需要在 Windows korn shell 中运行 ksh 脚本

mysql - PHP 应用程序 (CakePHP) 中的内存使用。或者是Linux配置?

linux - 我怎样才能实时收集一些连续的日志和grep word?

Linux 和用户级线程