2012-02-16

Bash: BASH_SOURCE

Bash で __FILE__ みたいなやつが欲しい。つまり Python でいう、

if __name__ == '__main__':
   main()

とか、Perl でいう、

if ($0 eq __FILE__) {
   main;
}

おっと、Perl ではこっちの方がイケてるんだっけ?

main unless caller;

とかいうのを Bash でやりたい。今まではその度に誤魔化してお茶を濁してきたが、そろそろ我慢できなくなってきた。で、調べると BASH_SOURCE を使え、と。

if [ "$0" = "$BASH_SOURCE" ] ; then
    main "$@"
fi

組み込み配列変数 BASH_SOURCE の 0 番目要素に現在処理中のファイル名が入っている。なので本来は ${BASH_SOURCE[0]} とするのが正確なのだろうが、動くなら簡単な方でいいや。

ただ、配列変数を単純参照したとき 0 番目要素の参照になる、という根拠は manpage や「O'reilly 入門 bash 第3版」などからは見つけきらんかった。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。