$0
変数を介して bash で実行中のスクリプトへのパスを取得するのは簡単です。ただし、別のスクリプトを介して点在している場合は機能しません。代わりに、呼び出し元のスクリプトへのパスを取得します。例を考えてみましょう:
#!/bin/bash
# script1.sh
echo $(readlink -f $0)
...
#!/bin/bash
# script2.sh
. /tmp/script1.sh
echo $(readlink -f $0)
上記のスクリプトからの出力は次のとおりです。
/tmp/script2.sh
/tmp/script2.sh
ただし、$0
ドットで囲まれたスクリプトでそのスクリプトへのパスが発行された場合、出力は代わりに次のようになります。
/tmp/script1.sh
/tmp/script2.sh
どうすればその正しい値を取得できますか?