sh中的函数名称

时间:2016-07-20 08:21:23

标签: linux sh

我正在尝试提取当前运行的函数名称以生成断言的日志。这是我试过的

function_name()
 {
   s=${FUNCNAME[0]}
   touch ${s}
 }

我认为$ {FUNCNAME [0]}仅适用于bash,而不适用于sh。

有没有办法在sh

中获取当前运行的函数名称

1 个答案:

答案 0 :(得分:1)

这样做的一种方法是将日志记录表达式手动插入到每个函数中,这很繁琐,但可以使用awk自动执行。

假设您遵守问题中使用的编码约定:

#!/usr/bin/awk    
/^[ \t]*function[ \t]*[a-zA-Z_][^(]*\(\)/ {
    name=$0
    sub(/^[ \t]*function[ \t]*/, "", name)
    sub(/[ \t]*\(\).*/, "", name)
    if ($0 !~ /\{/) {
        print
        getline
    }
    print
    print "    s='" name "'"
    print "    touch ${s}"
    next
}
1

代码是不言自明的,对于sh脚本中的每个函数,它解析函数名称,并在下面插入日志代码。请注意上面代码中的最后一行,这意味着打印出所有其他行。