こんにちは。よっしーです(^^)
今日は、shebang(シェバン)についてご紹介します。
背景
shebang(シェバン)について調査する機会があったので、そのときの内容を備忘として残しました。
この記事のソースは下記のサイトにアップしています。
実行環境について
実行環境は下記の記事を参考にお願いします。
作成ファイル一覧
下記のファイルを作成しました。
new file: local/work/03_shebang/03_shebang.sh
03_shebang.sh
#!/usr/bin/env bash
which bash
bash --version
動作確認
下記のコマンドを実行します。
make build
make up
make login
cd 03_shebang
chmod +x 03_shebang.sh
./03_shebang.sh
下記の結果が出力されていれば成功です。
root@4ab717961b7f:/work/03_shebang# ./03_shebang.sh
./03_shebang.sh
/usr/bin/bash
GNU bash, version 5.2.15(1)-release (aarch64-unknown-linux-gnu)
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
解説
03_shebang.sh
このコードは、Bashスクリプトで、シェバン(shebang)行とwhich
コマンドを使用しています。以下に解説します。
#!/usr/bin/env bash
:
- これはシェバン(shebang)行と呼ばれるもので、スクリプトがどのプログラムで実行されるべきかを指定します。
/usr/bin/env
は環境変数を利用して実行するプログラムを見つけるためのコマンドで、引数として指定されたプログラム(ここではbash
)を探して実行します。- この行により、スクリプトがBashで実行されるように指定されています。
which bash
:
which
は、指定されたコマンドのフルパスを表示するコマンドです。- このスクリプトでは、
which bash
が実行されています。これにより、システム上のbash
コマンドのフルパスが表示されます。 - スクリプトが実行される環境で
bash
がどのディレクトリにインストールされているかを確認するために使用されます。
bash --version
:
bash
コマンドに--version
オプションを付けて、Bashのバージョン情報を表示します。- これにより、システム上で実際に使用されているBashのバージョンが確認できます。
このスクリプトは、最初にどのバージョンのBashが使用されているかを確認するために、which
コマンドを利用しています。スクリプト全体が実行されると、ターミナルにbash
コマンドのフルパスが表示されます。
シェバン(shebang)
シェバン(shebang)は、Unix系オペレーティングシステムで使用される特殊なコメントです。通常、スクリプトファイルの先頭行に配置されます。シェバンは、そのスクリプトを実行するための対応する実行プログラム(インタプリタ)を指定します。
シェバンの構文は以下の通りです:
#!/path/to/interpreter
ここで、/path/to/interpreter
は実際にスクリプトを実行するためのプログラムのパスです。たとえば、Bashスクリプトの場合、シェバン行は通常以下のようになります:
#!/bin/bash
このシェバン行により、システムはスクリプトを解釈する際に指定されたインタプリタ(ここではBash)を使用します。シェバン行がない場合、システムは通常、デフォルトのシェル(通常は/bin/sh
)を使用します。
シェバン行の利点は、スクリプトがどのプログラムで実行されるべきかを明示的に指定できることです。これにより、異なるシェルやプログラムでスクリプトを実行する環境での予測可能な動作が確保されます。
/usr/bin/env
/usr/bin/env
を使用する主な理由は、環境に依存しない実行を可能にすることです。これにはいくつかの利点があります:
- ポータビリティ(Portability):
/usr/bin/env
を使用することで、実行環境が異なる場合でも正しいインタプリタを見つけることができます。- 例えば、Bashが
/bin/bash
にインストールされているシステムと、同じBashが/usr/bin/bash
にインストールされている別のシステムがある場合、/usr/bin/env bash
を使えば、どちらの場合も正しいBashを見つけることができます。
- 環境変数の利用:
env
コマンドは、環境変数を利用して実行するプログラムを見つける役割を果たします。これにより、$PATH
環境変数に含まれるディレクトリから対象のプログラムを検索します。- シェバンに直接パスを書くと、そのパスが存在しない場合や異なる場所にインストールされている場合に問題が発生する可能性があります。
env
を使うことで、環境変数の影響を受けるため、より柔軟な実行が可能です。
総じて、/usr/bin/env
を使用することで、スクリプトが異なる環境で実行される場合でも、適切な実行プログラムを見つけて実行できるため、スクリプトのポータビリティが向上します。
おわりに
今日は、shebang(シェバン)についてご紹介しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント