여기 내 단순화된 스크립트가 있습니다.
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