Pythonのスクリプトの shebang行 では、
#!/usr/bin/env python3
が使われることが多いです。
その理由はなぜでしょうか。
env の役割
man env
を調べると、以下のような説明が出てきます。
名前
env – 変更した環境でプログラムを実行する書式
env [OPTION]… [-] [NAME=VALUE]… [COMMAND [ARG]…]説明
環境変数 NAME を VALUE に設定し、 COMMAND を実行します。
env は引数で変数を設定することができ、その環境でコマンドを実行できるようです。
python3 のパスを変えてみます。
- 普通に which python3 を実行
which python3 /usr/bin/python3
- env に引数をつけないで which python3 を実行
env which pythone /usr/bin/python3
- 先ほどと同じ結果になりました。変数を何も変えていないので当然です
- env でPATH変数を変化させて which python3 を実行
env PATH=/usr/local/fsl/bin:$PATH which python3 /usr/local/fsl/bin/python3
- PATHの一番最初にFSLが来たことで、FSLの中に入っているpython3 が呼び出されました。
ということで、 env python3
は、「現在のパスの最初にあるpython3」を意味することになるわけですね。
システムの中に Python は複数存在し得るので、Shebang行にパス決め打ちのpythonを指定するより、envを使ったほうが汎用性の高いスクリプトになることがわかりました。