auの日記

プログラミング初心者の日記。(auはハンドルネームです)

シェルスクリプトの1行目に書く「#!」ってなんだろう

auです。

シェルスクリプトのファイル(.sh)を書く際に、おまじないのように1行目に「#!/~~~」と書きます。

なぜ書くのかを理解していなかったので調べてみました。

#!/とは

「#!」は、Shebangと呼ばれており、実行時にインタプリタを指定しているものです。
シバン・シェバンと呼ばれているようです。


Pythonを例に書いてみます。
Pythonファイルの行頭に

test.py

#!/usr/bin/env python3

print('Hello world')

と書けば、いつもと違う形で実行することができます。

実行方法は、

./test.py

となります。C言語みたいですね。
しかし、実行すると権限エラーが出ます。

権限を与えれば実行できるわけですね。

chmod +x test.py

メリット

Pythonの場合は、python2系なのかpython3系、バージョンを明示できることや、権限を書き分けることによって実行できる人を選ぶことができます。

まとめ

1行目にシバンを書くことで、何のインタプリタを使って実行するかを明示的に示すことができるようです。rubyと書けばrubyのファイルとして実行してくれたりと、なんだか面白い動きをしました。

話が一番最初に戻り、シェルスクリプトでのShebangですが、人によってはbashではなくcshを使っている人などがいて、使えないコマンドがある場合があるようです。そのような差を埋めるために、Shebangが必要なようですね。