一个函数是否可以区分它是否是这样运行的? “${@}”

一个函数是否可以区分它是否是这样运行的? “${@}”

这是我的简化脚本。

我想知道 proc() 是否可以知道它是直接运行还是通过运行器运行。

#!/bin/bash
runner () {
    "${@}"
}
proc() {
    eval 'version=$(echo "SUCCESS: **** ${BASH_VERSION} ****")'
    echo -e "$version"; 
    return 0
}

runner proc
proc

你怎么认为?

答案1

proc在您的示例中不是一个单独的过程。它只是一个函数,与主 shell 在同一进程中运行。

$FUNCNAME数组使其能够访问其回溯:

foo(){ bar; }
bar(){ baz; }
baz(){ proc; }
proc(){ echo "${FUNCNAME[@]}"; }

$ foo
proc baz bar foo main

所以是的,它可以:

case ${FUNCNAME[1]} in runner) ...

如果您尝试一下,您会发现在子 shell/子进程中运行它不会破坏回溯或以任何方式影响它:

foo(){ (bar &) | cat; }
=> same output

相关内容