🍏

シバン(shebang, #!)の有無と挙動

2024/06/23に公開

シェルスクリプトにおいて、シバン(shebang, #!)が無いときの挙動について説明します。

シバンはスクリプトの冒頭に記載される特殊な文字列で、スクリプトを実行する際にどのインタプリタを使用するかを指定します。例えば、以下のように記載します:

#!/bin/bash

これは、スクリプトを /bin/bash というバッシュシェルで実行するよう指示しています。

シバンが無い場合の挙動は以下のようになります:

  1. 明示的なインタプリタ指定:シェルスクリプトを実行する際に、明示的にインタプリタを指定して実行した場合、指定されたインタプリタが使用されます。

    bash script.sh
    

    この場合、script.sh にシバンが無くても、bash インタプリタが使用されます。

  2. 直接実行した場合:シバンが無く、スクリプトファイルを直接実行した場合、デフォルトのシェルが使用されます。多くのシステムでは、デフォルトのシェルは /bin/sh です。

    ./script.sh
    

    この場合、/bin/sh がデフォルトで使用されますが、システムによっては異なる場合もあります。たとえば、/bin/shbash にリンクされていることもあります。

  3. エラーハンドリング:スクリプトがシェルの構文に依存している場合、意図しないインタプリタで実行されるとエラーが発生する可能性があります。たとえば、bash 固有の構文を含むスクリプトが sh で実行されると、エラーが発生することがあります。

シバンを指定することは、スクリプトがどのシェルで実行されるべきかを明確にするための良い習慣です。これにより、スクリプトの移植性が向上し、予期しない挙動を防ぐことができます。

Discussion