포함된 스크립트가 포함되었는지 여부를 알고 실제 경로를 얻을 수 있습니까?
sub.sh
기본 논리를 실행하기 전에 사용자가 스크립트 그룹에 액세스할 수 있는지 확인하는 이를 호출하는 스크립트가 있다고 가정해 보겠습니다 .
#...
mypath=`realpath -e $0`
#if blablabla ... check mypath against user groups...
#
#...
위 스크립트는 다음과 같이 다른 스크립트에 포함될 수 있습니다.
#...
. sub.sh
#...
그러나 다른 스크립트 내에 포함되어 있으므로 호출자 스크립트에 대해 검사가 실행되는데 이는 원하는 효과가 아닙니다.
답변1
BASH_SOURCE
아마도 배열(bash에서)을 찾고 있을 것입니다 .
예:
소스 e.bs
fun(){
echo "$0"
echo "${BASH_SOURCE[0]}"
}
소스.bs
#!/usr/bin/env bash
echo "$0"
echo "${BASH_SOURCE[0]}"
source sourcee.bs
fun
테스트 실행
$ ./sourcer.bs
./sourcer.bs
./sourcer.bs
./sourcer.bs
sourcee.bs #Or the full path if it's in PATH instead of the PWD
답변2
$0
ZShell에 있습니다 .
% echo 'set | grep -a harglebargle' > harglebargle
% source harglebargle
0=harglebargle
%
( 누군가가 이 트릭을 시도해 본 경우에도 ARGV0=... source ...
이는 사실인 것 같습니다 .)
따라서 전체 경로의 경우:
% echo 'echo $0:a' > fullpath
% source fullpath
/home/jmates/tmp/fullpath
%