linux - sh 中的函数名

标签 linux sh

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

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/

相关文章:

python - 从shell脚本向python程序插入参数

linux - 从空格后开始的行中删除所有内容

shell - 了解 mercurial repo 状态的最快方法

linux - 有没有一种简单的方法可以按目录中的文件类型汇总磁盘使用情况?

java - 启动外部进程失败: cannot connect to X server

linux - 了解平均负载与 CPU 使用率

linux - 验证文件的 SHA-256 总和,如果不符合预期则退出脚本

linux - 在Linux中找到最长的中断

linux - 查看同一用户在其他终端输入命令的历史记录

bash - bash 是否有办法在不取消设置的情况下取消导出变量?