他の人のコードを読んでBashスクリプトを学習している場合、スクリプトの最初の行が#!で始まることに気付いたかもしれません。 文字とBashインタープリターへのパス。
この文字のシーケンス(#! )はシバンと呼ばれます また、ファイルの残りの部分を解析するために使用するインタプリタをオペレーティングシステムに指示するために使用されます。
Shebangインタプリタディレクティブ#
Shebangインタプリタディレクティブは次の形式を取ります:
#!interpreter [arguments]
- ディレクティブはスクリプトの最初の行である必要があります。
- ディレクティブはshebang
#!で始まる必要があります - シバン文字の後の空白はオプションです。
- インタプリタはバイナリファイルへのフルパスです(例:
/bin/sh、/bin/bash。 - インタプリタ引数はオプションです。
例:
-
#!/bin/bash-bashを使用します ファイルを解析します。 -
#!/usr/bin/env perl-envを使用しますperlへのパスを見つけるコマンド 実行可能ファイル。 -
#!/usr/bin/pythonpythonを使用してファイルを実行します バイナリ。
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を使用する方法を十分に理解できたはずです。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。