他の人のコードを読んでBashスクリプトを学習している場合、スクリプトの最初の行が#!
で始まることに気付いたかもしれません。 文字とBashインタープリターへのパス。
この文字のシーケンス(#!
)はシバンと呼ばれます また、ファイルの残りの部分を解析するために使用するインタプリタをオペレーティングシステムに指示するために使用されます。
Shebangインタプリタディレクティブ#
Shebangインタプリタディレクティブは次の形式を取ります:
#!interpreter [arguments]
- ディレクティブはスクリプトの最初の行である必要があります。
- ディレクティブはshebang
#!
で始まる必要があります - シバン文字の後の空白はオプションです。
- インタプリタはバイナリファイルへのフルパスです(例:
/bin/sh
、/bin/bash
。 - インタプリタ引数はオプションです。
例:
-
#!/bin/bash
-bash
を使用します ファイルを解析します。 -
#!/usr/bin/env perl
-env
を使用しますperl
へのパスを見つけるコマンド 実行可能ファイル。 -
#!/usr/bin/python
python
を使用してファイルを実行します バイナリ。
BashスクリプトでのShebangの使用#
シバンが指定されておらず、Bashスクリプトを実行しているユーザーが別のシェルを使用している場合、スクリプトは、そのシェルで使用されているデフォルトのインタープリターによって解析されます。たとえば、bash
のデフォルトのインタプリタ bash
です およびzsh
の場合 sh
です 。スクリプトが常にBashで解釈されるようにするには、shebangを使用して実行可能パスを指定する必要があります。
Shebangディレクティブを使用してインタプリタを設定する方法は2つあります。
-
bashバイナリへの絶対パスの使用:
#!/bin/bash
-
env
を使用する ユーティリティ:#!/usr/bin/env bash
2番目のアプローチを使用する利点は、bash
を検索することです。 ユーザーの$PATH
で実行可能ファイル 環境変数。 bash
へのパスが複数ある場合 、最初のものはスクリプトによって使用されます。
最初のオプションを使用してオプションをBashシェルサプライに追加する場合は、それをインタープリターに渡します。たとえば、スクリプトをデバッグモードで実行するには、#!/bin/bash -x
を使用します。 。env
を使用している場合 メソッドの場合は、set
を使用する必要があります オプションを宣言します。デバッグモードを有効にするには、set -x
を追加します シバンラインの後。
サンプルスクリプト#
「Hello、World」を出力するshebangを使用して簡単なスクリプトを作成しましょう。テキストエディタを開き、次の行を貼り付けます:
nano hello_world
hello_world #!/bin/bash
echo "Hello, World"
コマンドラインからインタプリタを指定せずにスクリプトを実行できるようにするには、ファイルを実行可能にする必要があります。
chmod +x hello_world
ここで、./
と入力してスクリプトを実行できる場合 その後にスクリプト名が続きます:
./hello_world
Hello, World
シェバンのオーバーライド#
何らかの理由でShebang行に設定されたインタープリターをオーバーライドする場合は、必要なシェルを明示的に指定してスクリプトを実行する必要があります。
たとえば、#!/bin/sh
を持つスクリプトを実行するには bash
を使用してShebang行で指定 入力するシェル:
bash hello_world
スクリプトの予期しない動作につながる可能性があるため、シェルインタープリターをオーバーライドすることはお勧めできません。
結論#
これで、Shebangとは何か、およびBashスクリプトでShebangを使用する方法を十分に理解できたはずです。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。