我正在尝试提取当前正在运行的函数名称以生成用于断言的日志。这是我试过的
function_name()
{
s=${FUNCNAME[0]}
touch ${s}
}
我认为 ${FUNCNAME[0]} 只适用于 bash,不适用于 sh。
有没有办法在sh中获取当前运行的函数名
最佳答案
一种方法是手动将日志记录表达式插入到每个函数中,这很乏味,但可以使用 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脚本中的每个函数,它解析函数名,并在下面插入日志代码。请注意上面代码中的最后一行,这意味着打印出所有其他行。
关于linux - sh 中的函数名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38476002/