스크립트의 실제 경로를 포함합니다.

스크립트의 실제 경로를 포함합니다.

포함된 스크립트가 포함되었는지 여부를 알고 실제 경로를 얻을 수 있습니까?

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

$0ZShell에 있습니다 .

% echo 'set | grep -a harglebargle' > harglebargle
% source harglebargle                             
0=harglebargle
%

( 누군가가 이 트릭을 시도해 본 경우에도 ARGV0=... source ...이는 사실인 것 같습니다 .)

따라서 전체 경로의 경우:

% echo 'echo $0:a' > fullpath
% source fullpath
/home/jmates/tmp/fullpath
% 

관련 정보