我正在尝试提取当前运行的函数名称以生成断言的日志。这是我试过的
function_name()
{
s=${FUNCNAME[0]}
touch ${s}
}
我认为$ {FUNCNAME [0]}仅适用于bash,而不适用于sh。
有没有办法在sh
中获取当前运行的函数名称答案 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脚本中的每个函数,它解析函数名称,并在下面插入日志代码。请注意上面代码中的最后一行,这意味着打印出所有其他行。