タグ

2019年8月16日のブックマーク (1件)

  • bash シェルスクリプトで Python の if __name__ == '__main__': 相当を実現する - Kenichi Maehashi's Blog

    Python スクリプトでは、if __name__ == '__main__':という記述をしばしば見かけます。この if 段落内のコードは、スクリプトを直接起動した場合、実行される他のスクリプトから import された場合は、実行されないという動作をします。 これによって、スクリプトの単体試験容易性を確保できる (単体試験用スクリプトから試験対象のスクリプトを import して関数単位の試験実施ができる) というメリットがありそうです。ぜひ、シェルスクリプトにもこの記法が欲しいですね。 bash ではスクリプトファイルのコールスタックが BASH_SOURCE 配列に格納されるので、これの配列長を見ることでコンテキストの判定をしてみます。 すなわち、BASH_SOURCE の配列長が 1 であれば、実行中のコードの記述されたスクリプトが直接起動されたと判断できそうです。 というわけ

    t_takata
    t_takata 2019/08/16
    これ、他の bash script から source する分には問題ないけど、中身の関数を直接 shell で確かめるために shell から source すると動いてしまうので注意が必要。それを防ぎたい場合はダメと例示されたやつのほうが良い。