私はそれを知っています、それを忘れて、再びそれを学び直してください。それを書き留める時間です。
私はそれを知っています、それを忘れて、再びそれを学び直してください。それを書き留める時間です。
回答:
実行不可能なshスクリプトを実行するには、次を使用します。
sh myscript
実行不可能なbashスクリプトを実行するには、次を使用します。
bash myscript
実行可能ファイル(実行可能権限を持つ任意のファイル)を起動するには、パスで指定するだけです:
/foo/bar
/bin/bar
./bar
スクリプトを実行可能にするには、必要な権限を与えます。
chmod +x bar
./bar
ファイルが実行可能である場合、カーネルはその実行方法を把握する必要があります。非バイナリの場合、これはファイルの最初の行を見ることで行われます。含まれている必要があり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マシンでは通常そうですが、他にもさまざまなPOSIXマシンがあります。bash/usr/xpg/bin/bashまたはなど、さまざまな場所に出荷されるさまざまな/usr/local/bin/bashます。
したがって、移植可能なbashスクリプトを作成するために、bashプログラムの場所をハードコーディングすることはできません。POSIXにはすでにそれを処理するためのメカニズムがあります。PATH。あるディレクトリにプログラムをインストールPATHすると、名前で実行したいときにシステムがプログラムを見つけられるようになるという考え方です。
残念ながら、これを行うことはできません。
#!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どこかにインストールしている場合があります。これは多くの場合、OS X(Mac)の場合で、Appleは古いバージョン/bin/bashを出荷し、ユーザーは/usr/local/bin/bashHomebrewなどを使用して最新のものをインストールします。検索envを行うアプローチを使用するPATH場合は、ユーザーの設定を考慮に入れ、システムに付属しているものよりも優先するbashを使用します。
zsh、私のシェルとして、私が使用しますかhashbang #! /usr/bin/env zsh?
#! /usr/bin/env zshコードを Zシェルで実行する必要がある場合(およびその場合のみ)を使用する必要があります。
ボーンシェルの場合:
sh myscript.sh
bashの場合:
bash myscript.sh
スクリプトを現在のシェルで実行する場合(たとえば、ディレクトリまたは環境に影響を与えることができるようにする場合)、次のように言う必要があります。
. /path/to/script.sh
または
source /path/to/script.sh
注/path/to/script.shたとえば、相対することができが. bin/script.sh走るscript.sh中でbin、現在のディレクトリの下のディレクトリ。
まず、実行権限を与えます:-
chmod +x script_name
sh script_namebash script_name./script_name注:-'ls -a'を使用して、ファイルが実行可能かどうかを確認できます。