bash
2011-10-04 5 views 2 likes 
2

lib-file이 하나 있습니다. 그것은 ponOS 함수의 하나의 wrapper-like 대체를가집니다. 나는 그것이 호출되는 함수의 ponOS 이름을 표시하고 싶다.bash FUNCNAME 값 확장

$> cat ./parasha_lib.sh 
#!/bin/bash 

function ponOS { 
    echo "$1: hello from ponOS" 
} 

ponOS='ponOS ${FUNCNAME}' 

그러나이 솔루션은 내가 원하는만큼 효과가 없었습니다.

$> cat ./test.sh 
#!/bin/bash 

source ./parasha_lib.sh 

function main { 
    echo "message from ${FUNCNAME}" 
    ponOS 
} 

main 

그래서,

$> ./test.sh 
message from main 
: hello from ponOS 

있어하지만이 얻을 싶어 :

$> ./test.sh 
message from main 
main: hello from ponOS 

어떻게해야합니까?

여기서 중요한 것은 ./test.sh를 수정하면 안된다는 것입니다 (ponOS $ {FUNCNAME} 해결책이 아님).

답변

3

이렇게하려면 ${FUNCNAME}이 주 기능 내에서 호출 될 때 확장되고 스크립트가 소스가 아닌 경우 ponOS을 별칭으로 설정해야합니다. 에

수정 ./parasha_lib.sh :

#!/bin/bash 

function ponOS { 
    echo "$1: hello from ponOS" 
} 

shopt -s expand_aliases   # enable alias expansion 
alias ponOS='ponOS ${FUNCNAME}' # create an alias to call ponOS 

참고 shopt -s expand_aliases는 별칭 확장을 사용하는 데 필요합니다. bash는 맨 페이지에서 :

별칭 expand_aliases 옵션이 test.sh을 변경하지 않고 우리가 원하는 출력을 얻을 지금 shopt 내부

를 사용하여 설정 쉘 않는 쉘이 상호 작용하지 않을 때 확장되지 않습니다

[[email protected]]$ ./test.sh 
message from main 
main: hello from ponOS 
+0

+1 좋은 답변입니다. –

+0

감사 글렌 ... –

관련 문제