いくつかのスクリプト言語でこれに気付きましたが、この例ではpythonを使用しています。多くのチュートリアルでは、最初の行は#!/usr/bin/python3
で始まります。なぜこれがあるのか分かりません。
どちらかといえば、上記の理由によりpythonスクリプトが壊れていることがわかりました。
#!/usr/bin/python3
はシェバンラインです。
シェバン行は、インタープリターの場所を定義します。この場合、python3
インタープリターは/usr/bin/python3
にあります。シバン行は、bash
、Ruby
、Perl
、またはその他のスクリプト言語のインタープリター(例:#!/bin/bash
)である場合もあります。
Shebang行がないと、スクリプトに実行フラグを設定して./script.py
のように実行しても、オペレーティングシステムはpythonスクリプトであることを認識しません。 python3でスクリプトをデフォルトで実行するには、python3 script.py
としてスクリプトを呼び出すか、Shebang行を設定します。
言語インタープリターが異なる場所にインストールされている場合、異なるシステム間での移植性のために#!/usr/bin/env python3
を使用できます。
それはハッシュバンと呼ばれます。シェルからスクリプトを実行する場合、最初の行を調べて、スクリプトを解釈するためにどのプログラムを開始する必要があるかを判断します。
非UnixベースのOSは、独自のルールを使用して、スクリプトの実行方法を決定します。たとえば、Windowsはファイル名拡張子を使用し、#
を使用すると、最初の行がコメントとして扱われます。
Python実行可能ファイルへのパスが間違っていると、当然スクリプトは失敗します。標準の規則で指定された場所から実際の実行可能ファイルへのリンクを簡単に作成できます。
この行は、スクリプトを実行するプログラム実行可能ファイルを見つけるのに役立ちます。このShebang表記は、ほとんどのスクリプト言語でかなり標準的です(少なくとも、成長したオペレーティングシステムで使用されているように)。
この行の重要な側面は、whichインタープリターが使用されることを指定することです。たとえば、多くの開発中心のLinuxディストリビューションでは、pythonの複数のバージョンが同時にインストールされるのが普通です。
Python 2.xとPython 3は100%の互換性がないため、この違いは非常に重要です。したがって、#! /usr/bin/python
と#! /usr/bin/python3
は同じではありません(また、このページの別の場所に記載されている#! /usr/bin/env python3
とまったく同じでもありません。
そして、この行はhowです。
無視されます。
実行に失敗するため、適切な場所を指すように変更する必要があります。またはenv
を使用する必要があります。
実行に失敗し、おそらく別のバージョンでの実行に失敗します。
.7 Python doc から、Shebang行がウィンドウに対してどのように機能するかを明確にするため:
実際、ファイルがどのタイプのファイルであるかを判断することは非常に複雑であるため、オペレーティングシステムはこれを知ることができません。それに基づいて多くの推測を行うことができます-
しかし、コマンドラインはそのすべてに煩わされません。なぜなら、その派手なナンセンスは何の意味もなかったので、限られた下位互換性のあるレイヤーで実行されるからです。確かにダブルクリックすると、最新のOSはそれを理解できますが、端末から実行する場合は、端末は派手なOS固有のファイル入力APIを気にしないので、いいえです。
他の点に関して。便利で、同様に実行できます
python3 path/to/your/script
pythonが指定されたパスにない場合、機能しませんが、この機能を有効にするためのものをインストールする傾向があります。 * nixの下にあるかどうかは実際には関係ありません。shellcode
であるため、この行を検討するかどうかはシェル次第です。たとえば、Windowsでbash
を実行できます。
実際には、この行を完全に省略できます。これは、呼び出し元がインタープリターを指定する必要があることを意味します。また、通訳者を非標準の場所に置いてから、通訳者を用意せずにスクリプトを呼び出そうとしないでください。