Caminho real de um script incluído

0

Um script incluído pode saber se está sendo incluído e obter seu caminho real?

Suponha que um script chamado sub.sh verifique se o usuário tem acesso ao grupo de scripts antes de executar sua lógica principal:

#...
mypath='realpath -e $0'
#if blablabla ... check mypath against user groups...
#
#...

O script acima pode ser incluído em outro, da seguinte forma:

#...
. sub.sh
#...

Mas, como está sendo incluído por outro script, o check-up é executado em relação ao script do chamador, que não é o efeito desejado.

    
por Luciano 14.09.2015 / 22:10

2 respostas

1

Provavelmente você está procurando a matriz BASH_SOURCE (no bash).

Exemplo:

sourcee.bs

fun(){
    echo "$0"
    echo "${BASH_SOURCE[0]}"
}

sourcer.bs

#!/usr/bin/env bash
echo "$0"
echo "${BASH_SOURCE[0]}"
source sourcee.bs
fun

testrun

$ ./sourcer.bs
./sourcer.bs
./sourcer.bs
./sourcer.bs
sourcee.bs    #Or the full path if it's in PATH instead of the PWD
    
por 14.09.2015 / 22:52
0

É $0 em ZShell:

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

(Isso parece verdadeiro mesmo que se tente o truque ARGV0=... source ... .)

Então, para o caminho completo:

% echo 'echo $0:a' > fullpath
% source fullpath
/home/jmates/tmp/fullpath
% 
    
por 14.09.2015 / 23:03