Linuxの - スィベン(Shebang)は何ですか?

Shebangは(事前に検索してみる)シュ障害者と読みました。スィベンは #!で始まる文字列であり、スクリプトの先頭最初の行にあります。 スィベンは、Unix系オペレーティングシステムでは、スクリプトが実行されるときは、Python、バッシュシェルなど、どんなインタプリタによって動作がされるかを示します。

スィベンでスクリプトの実行を試みる

例えば、以下のようなコードは、特別なインタプリタが指定されない場合Python2で実行されます。

#!/usr/bin/python2
import sys
print("python version: %s"%sys.version_info[0])

もちろん、このファイルは、実行可能なファイルが必要です。 以下のように実行できるように権限を付与して実行をしてくれるします。

$ chmod +x shebang.py
$ ./shebang.py

結果を見ると、Pythonの2で実行された。 sys.version_info[0]は、Pythonのバージョンを出力するコードです。

python version: 2

envを使用してスクリプトを実行する

スィベンを #!/usr/bin/python2に設定すると、常に、Python 2で実行されます。 もし環境変数に設定されているPythonのバージョンを使用したいことができます。

こういうときは、 #!/usr/bin/env pythonを使用します。

#!/usr/bin/env python
import sys
print("python version: %s"%sys.version_info[0])

まず、テストを試みるよ。現在私の環境変数は、Pythonの3に設定されています。

$ python --version
Python 3.7.0

上記のようにスィベンを変更して実行すると、Pythonの3で実行されるのを見ることができます。 もし環境変数をPythonの2に変更すると、Python 2で実行されます。

$ ./shebang.py
python version: 3

envは、UnixとUnixライクのオペレーティングシステム用のシェルコマンドです。 環境変数のリストを出力したり、他のユーティリティを実行するのに使用することができます。

上記のコードは、envを利用して、 $PATHに最初に検索されているPythonのバージョンでスクリプトを実行することができます。

バージョンの入力とenvの使用の長所と短所

バージョンを直接入力すると、環境変数に影響を受けずに、常に必要なインタープリタのバージョンで実行することができます。 欠点は、直接入力した場所にインタプリタがインストールされていない場合に実行することができません。 さまざまな環境で実行されるスクリプトの場合は、問題がある可能性があります。

一方、envを使用すると、環境変数に設定されたインタプリタは、例えば、Pythonで実行することができます。 しかし、Pythonのバージョン2でインストールしたのか3にインストールされていることに応じて異なる動作することができます。

その他の休み障害者に使用されるケース

スィベンは以下のような方法で使用されています。

  • #!/bin/sh: / bin / shパスのBourneシェルまたは互換性のあるシェルを使用して、ファイルを実行
  • #!/bin/csh -f: Cシェル(csh)または互換性のあるシェルを使用して、ファイルを実行し、起動時にユーザーの.cshrcファイルの実行を防止
  • #!/usr/bin/perl: Tテイントスキャンオプションでパールを使用して、実

参考

codechachaCopyright ©2019 codechacha