#!/bin/bashって何?

シェルスクリプトで最初の一文に#!/bin/bashと記述します。

これは、一体何なのでしょうか。自分なりに調べてみました。

shebang

#!で始まる一文は、shebang(シバンやシェバン)と呼ばれます。#!のあとにスクリプトを読み込むインタープリターを指定します。

インタープリターとは、プログラミング言語で書かれたソースコードを逐次解釈しながら実行するプログラムで、PythonやRubyがそれに該当します。

ですので、PythonやRubyでもshebangはあっても問題ないわけです。

私は、今までシェルスクリプトでしか見たことがなかったので…勉強になりました。

インタープリター言語

インタープリター言語では、2つの方法で実行できます。

  • コマンドに続けてファイル名を指定して実行する方法。
  • ファイルを直接実行する方法。

コマンドに続けてファイル名を指定して実行する方法は、見慣れた方法で、簡単です。

例として、以下のようになります。Pythonファイルを実行する場合、pythonのコマンドとそのファイル名を指定するだけです。以下、例は全てpythonファイルの実行を想定しています。

$ python sample.py

もう一つの方法として、ファイル名を指定して直接実行する方法です。

$ ./sample.py

こちらは、あまり見慣れないと思います。これでも実行できます。

しかし、ファイルに実行権があり、かつshebangにインタープリタを指定する必要があります。

ファイルが実行権を持っているかは、以下のコマンドを実行してください。

$ ls -l
-rw-r--r-- 1 hoge hoge 100 Jan 1 2021 sample.py

「r」や「w」が書いてあるのが権限です。実行権「x」がないので、実行権を付加しましょう。

パーミッション(権限)に関しては今後の記事にまとめます。

$ chmod +x sample.py

そして、ファイルの1行目にshebangを追加してください。

#!/usr/bin/python

インタープリターの絶対パスがわからないときは、以下のコマンドを実行してください。

$ which python

これで、ファイルを直接コマンドとして実行できます。

shebangのメリット

ファイルを実行するならコマンドでファイル名を指定する方が簡単でいいと思います…

shebangを入れるとそのソースコードは、どのコマンドで動かすのか明確になります。

シェルの場合、たくさん種類があり、またそれぞれ使える構文が違います。

なので、シェルの場合は尚更shebangを使います。

まあ、あと直接コマンドとして実行できますから。

まとめ

shebangは、ファイルをコマンドのように直接実行できるようになります。

どのコマンドで実行するか明記できてわかりやすいです。