bash スクリプトで main を作りたい。
スクリプトファイルは、source
で読み込まれることがある。
実行されたときだけ、sourceで読み込まれたときだけ実行したい。という希望もまた存在する。
python の場合
python の場合は、main を使って次のようにかける。
if __name__ == '__main__': sys.exit(main(sys.argv))
bash の場合
bash の場合は、次のように書くことでsourceを判別できる。
if [ "$0" = "$BASH_SOURCE" ]; then echo "Error: Script must be sourced" exit 1 fi
BASH_SOURCE という変数をつかってbash sourceを判定できる。
bash って本当に便利ですね。POSIX互換?bash 互換で十分では。
sh の場合
sh の場合、完璧ではないが、ある程度の防衛策がある。
if [[ "$(basename -- "$0")" == "script.sh" ]]; then >&2 echo "Don't run $0, source it" exit 1 fi
安心
これで、bash スクリプトを関数定義ごとに分割して書くことができる。安心である。