2021年10月20日 更新

シェバンについて

どうも、クラゲジュニアです。
今回は、シェバンについてです。
書かなくても、動くよね?お祈り?と思う方もいるかもしれません。

しっかり意味があります!!

そもそもシェバンとは?

シェバンは、スクリプトの#!から始まる1行目のことを指します。

#! /bin/sh

お祈りなの?

本題に入りましょう。
今回はサンプルとして、以下のようなシェルスクリプトを使用します。

sample.sh

#! /bin/bash
grep 'fuga' < <(cat hoge.txt)

hoge.txt

Hello
World
fuga

ただ単にfugaが出力されるスクリプトです。

sample.shを作成し上記のコードを追記しシェルスクリプトを起動してみましょう。

想定通りの挙動です。
次はシェバンを消してみましょう。
ファイルの中身は、以下のようになります。

grep 'fuga' < <(cat hoge.txt)

変わらずfugaしてくれます。

やっぱりシェバンに意味はないのか??

シェバンに意味は、あります!!
もう一度シェルスクリプトの中身を以下のように戻してファイル名をsampleにしましょう。  

#! /bin/bash
grep 'fuga' < <(cat hoge.txt)

実行権限も与えてください。

chmod +x sample

今度は、bashへの引数ではなくシェルスクリプトそのものを実行してみます。

シェバン付きの場合は実行できます。
シェバンを消してみると・・・・
エラーが発生しました。

これがシェバンが必要な理由です。
シェバンは、スクリプト自体を実行する際にどのプログラムで実行するかを指定します。
今回はbashの記法なのにデフォルトのshで実行されてしまいました。

以上です。