シェルスクリプト「file.sh」を開始するには:
sh file.sh
bash file.sh
もう 1 つのオプションは、chmod コマンドを使用して実行権限を設定することです:
chmod +x file.sh
次のように .sh ファイルを実行します:
./file.sh
実行不可能な sh
を実行するには スクリプト、使用:
sh myscript
実行不可能な bash
を実行するには スクリプト、使用:
bash myscript
実行可能ファイル (実行権限を持つ任意のファイル) を開始するには;パスで指定するだけです:
/foo/bar
/bin/bar
./bar
スクリプトを実行可能にするには、必要な権限を与えます:
chmod +x bar
./bar
ファイルが実行可能な場合、カーネル それを実行する方法を理解する責任があります。非バイナリの場合、これはファイルの最初の行を調べることによって行われます。 hashbang
が含まれている必要があります :
#! /usr/bin/env bash
ハッシュバンは、実行するプログラムをカーネルに指示します (この場合、コマンド /usr/bin/env
引数 bash
で実行されます )。次に、スクリプトは、後続の引数としてスクリプトに与えたすべての引数と共に (2 番目の引数として) プログラムに渡されます。
つまり、実行可能なすべてのスクリプトにはハッシュバンが必要です .そうでない場合は、それが何であるかをカーネルに伝えていません 、したがって、カーネルはそれを解釈するためにどのプログラムを使用するかを知りません。 bash
かもしれません 、 perl
、 python
、 sh
、 または、他の何か。 (実際には、カーネルはユーザーのデフォルト シェルを使用してファイルを解釈することがよくありますが、これは非常に危険です。なぜなら、それはまったく適切なインタープリターではないか、一部を解析できる可能性があるためです。 sh
の間の場合 および bash
).
/usr/bin/env
に関する注意事項
ほとんどの場合、次のようなハッシュ バングが表示されます。
#!/bin/bash
その結果、カーネルはプログラム /bin/bash
を実行します。 スクリプトを解釈します。残念ながら、bash
は常にデフォルトで出荷されるとは限らず、/bin
で常に利用できるとは限りません . Linux マシンでは通常そうですが、他の POSIX マシンでは bash
が含まれる範囲があります。 /usr/xpg/bin/bash
など、さまざまな場所に出荷されます または /usr/local/bin/bash
.
したがって、移植可能な bash スクリプトを作成するために、bash
の場所をハードコーディングすることに頼ることはできません。 プログラム。 POSIX には、それを処理するメカニズムが既にあります:PATH
. PATH
にあるディレクトリの 1 つにプログラムをインストールするという考え方です。 名前でプログラムを実行したい場合、システムはプログラムを見つけられるはずです。
残念ながら、できません これを行うだけです:
#!bash
カーネルは PATH
を実行しません (一部のユーザーは実行する可能性があります)。 あなたを探します。 PATH
を実行できるプログラムがあります env
という名前です。 .幸いなことに、ほぼすべてのシステムに env
があります。 /usr/bin
にインストールされたプログラム . env
を開始します PATH
を実行するハードコードされたパスを使用する bash
を検索 スクリプトを解釈できるように実行します:
#!/usr/bin/env bash
このアプローチには 1 つの欠点があります。POSIX によると、ハッシュバンは 1 つの引数 を持つことができます。 .この場合、bash
を使用します。 env
への引数として プログラム。つまり、bash
に引数を渡すスペースが残っていません。 .したがって、#!/bin/bash -exu
のようなものを変換する方法はありません このスキームに。 set -exu
を入力する必要があります 代わりにハッシュバンの後。
このアプローチには別の利点もあります。システムによっては、/bin/bash
、しかしユーザーはそれを気に入らないかもしれませんし、バグがあるか時代遅れだと思うかもしれませんし、自分の bash
をインストールしたかもしれません 何処か別の場所。これは多くの場合、Apple が古い /bin/bash
を出荷している OS X (Mac) に当てはまります。 ユーザーは最新の /usr/local/bin/bash
をインストールします Homebrew のようなものを使用します。 env
を使用する場合 PATH
を行うアプローチ ユーザーの好みを考慮して、システムに同梱されていたものよりも好みの bash を使用します。
Bourne シェルの場合:
sh myscript.sh
バッシュの場合:
bash myscript.sh