スクリプトの実際のパスが含まれています。

スクリプトの実際のパスが含まれています。

埋め込みスクリプトが含まれているかどうかを知って実際のパスを取得できますか?

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
% 

関連情報