这是我的简化脚本。
我想知道 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