私はそれを知っていて、それを忘れてもう一度それを再学習します。それを書き留める時間です。
実行不可能なsh
スクリプトを実行するには、次のようにします。
sh myscript
実行不可能なbash
スクリプトを実行するには、次のようにします。
bash myscript
実行可能ファイル(実行可能権限を持つ任意のファイル)を起動する。パスで指定するだけです。
/foo/bar
/bin/bar
./bar
スクリプトを実行可能にするには、必要な権限を与えます。
chmod +x bar
./bar
ファイルが実行可能であるとき、kernelはそれをどのように実行するかを決める責任があります。非バイナリの場合、これはファイルの最初の行を見ることによって行われます。 hashbang
を含める必要があります。
#! /usr/bin/env bash
Hashbangはカーネルに実行するプログラムを指示します(この場合、コマンド/usr/bin/env
は引数bash
を付けて実行されます)。次に、スクリプトは、後続の引数としてスクリプトに指定したすべての引数とともに(2番目の引数として)プログラムに渡されます。
それは実行可能なすべてのスクリプトはハッシュバングを持つべきであるを意味します。そうでなければ、カーネルにそれが が であると言っているわけではないので、カーネルはそれを解釈するために使用するプログラムを知りません。それはbash
、Perl
、python
、sh
、または何か他のものです。 (実際には、カーネルはファイルの解釈にユーザーのデフォルトのシェルを使用することがよくあります。これは正しいインタプリタではないか、一部の構文解析が可能であるが微妙な動作の違いがあるため非常に危険です。 sh
とbash
の間の場合.
/usr/bin/env
に関するメモ最も一般的には、次のようにハッシュ値が表示されます。
#!/bin/bash
その結果、カーネルはスクリプトを解釈するためにプログラム/bin/bash
を実行します。残念ながら、bash
は常にデフォルトで出荷されているわけではなく、また/bin
で使用できるわけでもありません。 Linuxマシンでは通常そうですが、/usr/xpg/bin/bash
や/usr/local/bin/bash
のようにbash
がさまざまな場所に出荷されるPOSIXマシンは他にもあります。
したがって、移植可能なbashスクリプトを書くために、bash
プログラムの場所をハードコーディングすることに頼ることはできません。 POSIXはそれを扱うためのメカニズムを既に持っています:PATH
。これは、PATH
にあるディレクトリの1つにプログラムをインストールし、名前でプログラムを実行したいときにシステムがそのプログラムを見つけることができるはずです。
悲しいことに、あなたは できない これをするだけです:
#!bash
カーネルはあなたのためにPATH
検索をしないでしょう。あなたのためにPATH
検索を実行できるプログラムがありますが、それはenv
と呼ばれます。幸い、ほとんどすべてのシステムで/usr/bin
にenv
プログラムがインストールされています。そのため、ハードコードされたパスを使用してenv
を開始します。次に、PATH
をbash
で検索し、スクリプトを解釈できるように実行します。
#!/usr/bin/env bash
このアプローチには1つ欠点があります。POSIXによると、ハッシュバンは1引数を持つことができます。この場合、bash
プログラムへの引数としてenv
を使用します。これは、引数をbash
に渡すためのスペースが残っていないことを意味します。そのため、#!/bin/bash -exu
のようなものをこのスキームに変換する方法はありません。代わりに、ハッシュバングの後にset -exu
を配置する必要があります。
このアプローチにはもう1つの利点があります。システムによっては/bin/bash
が同梱されている場合がありますが、ユーザーが気に入らない、バグがある、または古くなっている、その他の場所に独自のbash
がインストールされている場合があります。これは多くの場合、Appleが古い/bin/bash
を出荷し、ユーザーがHomebrewのようなものを使って最新の/usr/local/bin/bash
をインストールするOS X(Mac)の場合です。 env
検索を実行するPATH
アプローチを使用するとき、あなたはユーザーの好みを考慮に入れて、彼のシステムに同梱されているものより彼の好みのbashを使います。
シェルスクリプト 'file.sh'を起動するには:
sh file.sh
bash file.sh
もう1つのオプションは、chmodコマンドを使用して実行可能権限を設定することです。
chmod +x file.sh
次のようにして.shファイルを実行します。
./file.sh
ボーンシェルの場合:
sh myscript.sh
Bashの場合:
bash myscript.sh
スクリプトを現在のシェルで実行したい場合(たとえば、ディレクトリまたは環境に影響を与えたい場合)、次のようにしてください。
. /path/to/script.sh
または
source /path/to/script.sh
/path/to/script.sh
は相対的であることに注意してください。例えば、. bin/script.sh
は現在のディレクトリの下のbin
ディレクトリでscript.sh
を実行します。
ファイル拡張子.commandがTerminal.appに割り当てられています。任意の.commandファイルをダブルクリックすると実行されます。
まず、実行の許可を与えます: - chmod +x script_name
sh script_name
bash script_name
./script_name
_ note _ : - ファイルが実行可能かどうかは 'ls -a'を使って確認できます