シェル入門:shebangについて

スポンサーリンク
シェル入門:shebangについて ノウハウ
シェル入門:shebangについて
この記事は約6分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、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コマンドを使用しています。以下に解説します。

  1. #!/usr/bin/env bash:
  • これはシェバン(shebang)行と呼ばれるもので、スクリプトがどのプログラムで実行されるべきかを指定します。
  • /usr/bin/envは環境変数を利用して実行するプログラムを見つけるためのコマンドで、引数として指定されたプログラム(ここではbash)を探して実行します。
  • この行により、スクリプトがBashで実行されるように指定されています。
  1. which bash:
  • whichは、指定されたコマンドのフルパスを表示するコマンドです。
  • このスクリプトでは、which bashが実行されています。これにより、システム上のbashコマンドのフルパスが表示されます。
  • スクリプトが実行される環境でbashがどのディレクトリにインストールされているかを確認するために使用されます。
  1. 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を使用する主な理由は、環境に依存しない実行を可能にすることです。これにはいくつかの利点があります:

  1. ポータビリティ(Portability):
  • /usr/bin/envを使用することで、実行環境が異なる場合でも正しいインタプリタを見つけることができます。
  • 例えば、Bashが/bin/bashにインストールされているシステムと、同じBashが/usr/bin/bashにインストールされている別のシステムがある場合、/usr/bin/env bashを使えば、どちらの場合も正しいBashを見つけることができます。
  1. 環境変数の利用:
  • envコマンドは、環境変数を利用して実行するプログラムを見つける役割を果たします。これにより、$PATH環境変数に含まれるディレクトリから対象のプログラムを検索します。
  • シェバンに直接パスを書くと、そのパスが存在しない場合や異なる場所にインストールされている場合に問題が発生する可能性があります。envを使うことで、環境変数の影響を受けるため、より柔軟な実行が可能です。

総じて、/usr/bin/envを使用することで、スクリプトが異なる環境で実行される場合でも、適切な実行プログラムを見つけて実行できるため、スクリプトのポータビリティが向上します。

おわりに

今日は、shebang(シェバン)についてご紹介しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました