呼び出し側がコマンドラインにインタプリタを提供したかどうかを確認するか、使用するインタプリタを決定するためにshebang行を使用する方法はPythonスクリプトにありますか?
簡単な例として、myscript.py(実行権限を含む)は次のとおりです。
#!/bin/env python
import sys
print sys.argv
このスクリプトが呼び出されるかどうかを知りたいです。
$ python myscript.py
または
$ ./myscript.py
どちらの場合も、sys.argv [0]は "myscript.py"です。
答え1
これは、shebang行を介して(間接的に)設定された環境変数を使用して達成できます。
理論的には、同じ変数をシェルに設定することができますが、検出メカニズムを明示的に欺くような場合を除き、大丈夫です。
残念ながら、shebang行は2つのパラメータに制限されていますが、これは十分ではありません(少なくとも私はその解決策を知りません)。したがって、ヘルパースクリプトが必要です。幸いなことに、Linuxカーネルはshebangインタプリタがバイナリである必要はありません。
/usr/local/bin/shebang-bash.sh
#! /bin/bash
via_shebang=1 bash "$1"
次に、そのスクリプトをshebangソルバーとして使用します。
#! /usr/local/bin/shebang-bash.sh
スクリプトでの値/存在を確認するだけです$via_shebang
。