2013-10-21 3 views
1

bash에서 실행중인 스크립트의 경로를 얻는 것은 $0 변수를 통해 간단합니다. 그러나 다른 스크립트를 통해 점으로 찍히는 경우에는 작동하지 않고 대신 호출하는 스크립트의 경로가 표시됩니다.점으로 찍힌 스크립트의 경로 검색

/tmp/script2.sh 
/tmp/script2.sh 

그러나, 점선 인 스크립트 $0 경로로 방출하는 경우 : 상기 스크립트로부터 출력되는

#!/bin/bash 
# script2.sh 
. /tmp/script1.sh 
echo $(readlink -f $0) 

#!/bin/bash 
# script1.sh 
echo $(readlink -f $0) 

... 다음 예를 고려 이 스크립트 대신 출력은 다음과 같습니다.

/tmp/script1.sh 
/tmp/script2.sh 

올바른 값을 얻으려면 어떻게해야합니까?

+0

FYI -'echo "$ (readlink -f"$ 0 ")"는 더 정확한 공식 일 것입니다. 그리고'$ 0'은 * always * suspect입니다. 끝에있는 섹션을 포함하여 [BashFAQ # 28] (http://mywiki.wooledge.org/BashFAQ/028)을 참조하십시오 ("왜 $ 0은 옵션이 아닌가"). –

답변

2

이제 출력이 당신이 ${BASH_SOURCE[0]}

#!/bin/bash 
# script1.sh 
real_dollar_zero=${BASH_SOURCE[0]} 
echo $(readlink -f $real_dollar_zero) 

을 사용할 수 있습니다이 (bash는 특정) 극복하기 :

/tmp/script1.sh 
/tmp/script2.sh 

비올라를! - The strung musical instrument often confused with a violin!

+1

나는 당신이 * voila * (또는 좀더 적절하게 * voil *)를 의미한다고 생각한다. "see here"에 대한 프랑스어이다. – tripleee

+1

나는 당신이 옳다고 생각한다. 나는 실제로 악기를 전혀 의미하지 않았다! 덜 성급하게, 더 빠른 속도. :-) 유머를 위해서 거기에 남겨 둘 것입니다. – Craig

+1

프랑스어로'viola'는 랩핑을 의미합니다. 그래서 @tripleee가 맞을 것이라고 생각합니다. :) –

관련 문제