ソースの方法はありますか それ自体へのパスを見つけるためのシェルスクリプト?私は主にbashに関心がありますが、tcshを使用する同僚がいます。
ソーシングによってコマンドが現在のシェルで実行されるため、ここではあまり運がないかもしれないと思います。したがって、$0
ソーススクリプトではなく、現在のシェルの呼び出しです。私の現在の最善の考えは、source $script $script
を実行することです。 、最初の位置パラメータに必要な情報が含まれるようにします。誰かもっと良い方法がありますか?
明確にするために、私はソーシングしています スクリプトを実行していない:
source foo.bash
承認された回答:
tcsh
で 、$_
スクリプトの先頭には、ファイルがソースされた場合の場所と$0
が含まれます 実行された場合は含まれます。
#!/bin/tcsh
set sourced=($_)
if ("$sourced" != "") then
echo "sourced $sourced[2]"
endif
if ("$0" != "tcsh") then
echo "run $0"
endif
Bashの場合:
#!/bin/bash
[[ $0 != $BASH_SOURCE ]] && echo "Script is being sourced" || echo "Script is being run"