シバン
シバン
一言で言うと
#!/bin/bash の行。
もう少し詳しく
一言で言うと
スクリプトの先頭行に書く #! から始まる記述。OS にどのインタープリタでこのスクリプトを実行するかを伝える。#!/bin/bash のほか #!/usr/bin/env python3 なども同じ仕組みで動く。
もう少し詳しく
シバン(shebang)はスクリプトファイルの1行目に書く #! に続けてインタープリタのフルパスを指定する記述です。
カーネルによる起動の仕組み
スクリプトを実行しようとすると、Linux カーネルは最初の2バイト #! を読み取り、その後ろに書かれたパスのプログラムを起動してスクリプトを引数として渡します。シェルが処理するのではなく、カーネルが直接インタープリタを呼び出すのがポイントです。
#!/bin/bash と #!/usr/bin/env bash の違い
#!/bin/bash は bash の場所を絶対パスで固定するため、bash が /bin 以外にある環境(macOS の Homebrew 環境など)では動作しないことがあります。#!/usr/bin/env bash は env コマンドを経由して PATH から bash を探すため、環境差異に強く可搬性が高い書き方です。Python スクリプトでも #!/usr/bin/env python3 が推奨される理由も同じです。
シバンがない場合の挙動
シバン行がないスクリプトを実行すると、多くの場合は呼び出し元のシェルがそのままスクリプトを解釈します。ただしこれは環境依存の動作であり、意図しないシェルで実行されてエラーになるリスクがあります。移植性を確保するためにシバンは必ず明記するのがベストプラクティスです。
実務でどう使うか
関連する章
Ch54 で詳しく学べます。