ここに私の単純化されたスクリプトがあります。
私はproc()が直接実行されているのかランナーを介して実行されているのかを知ることができるかどうか疑問に思います。
#!/bin/bash
runner () {
"${@}"
}
proc() {
eval 'version=$(echo "SUCCESS: **** ${BASH_VERSION} ****")'
echo -e "$version";
return 0
}
runner proc
proc
どう思いますか?
答え1
proc
あなたの例では別々のプロセスではありません。これはメインシェルと同じプロセスで実行される関数です。
この$FUNCNAME
配列を使用すると、バックトレースにアクセスできます。
foo(){ bar; }
bar(){ baz; }
baz(){ proc; }
proc(){ echo "${FUNCNAME[@]}"; }
$ foo
proc baz bar foo main
はい。以下が可能です。
case ${FUNCNAME[1]} in runner) ...
試してみると、サブシェル/サブプロセスで実行してもトレースバックが壊れたり、何の影響も与えないことがわかります。
foo(){ (bar &) | cat; }
=> same output