web-dev-qa-db-ja.com

UnixコンソールまたはMac端末でシェルスクリプトを実行する方法

私はそれを知っていて、それを忘れてもう一度それを再学習します。それを書き留める時間です。

488
P-A

実行不可能な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番目の引数として)プログラムに渡されます。

それは実行可能なすべてのスクリプトはハッシュバングを持つべきであるを意味します。そうでなければ、カーネルにそれがであると言っているわけではないので、カーネルはそれを解釈するために使用するプログラムを知りません。それはbashPerlpythonsh、または何か他のものです。 (実際には、カーネルはファイルの解釈にユーザーのデフォルトのシェルを使用することがよくあります。これは正しいインタプリタではないか、一部の構文解析が可能であるが微妙な動作の違いがあるため非常に危険です。 shbashの間の場合.

/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/binenvプログラムがインストールされています。そのため、ハードコードされたパスを使用してenvを開始します。次に、PATHbashで検索し、スクリプトを解釈できるように実行します。

#!/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を使います。

908
lhunath

シェルスクリプト 'file.sh'を起動するには:

sh file.sh

bash file.sh

もう1つのオプションは、chmodコマンドを使用して実行可能権限を設定することです。

chmod +x file.sh

次のようにして.shファイルを実行します。

./file.sh
78
P-A

ボーンシェルの場合:

sh myscript.sh

Bashの場合:

bash myscript.sh
15
anon

スクリプトを現在のシェルで実行したい場合(たとえば、ディレクトリまたは環境に影響を与えたい場合)、次のようにしてください。

. /path/to/script.sh

または

source /path/to/script.sh

/path/to/script.shは相対的であることに注意してください。例えば、. bin/script.shは現在のディレクトリの下のbinディレクトリでscript.shを実行します。

10
Chas. Owens

ファイル拡張子.commandがTerminal.appに割り当てられています。任意の.commandファイルをダブルクリックすると実行されます。

0
benwiggy

まず、実行の許可を与えます: -
chmod +x script_name

  1. スクリプトが実行可能ではない場合: -
    shスクリプトファイルを実行する場合 -
    sh script_name
    bashスクリプトファイルを実行する場合: -
    bash script_name
  2. スクリプトが実行可能である場合: -
    ./script_name

_ note _ : - ファイルが実行可能かどうかは 'ls -a'を使って確認できます

0
Vineet Jain