2012-12-14 11 views
68

bashスクリプトでは、1行目の#!/bin/bashはどういう意味ですか?Bash Script:#!/ bin/bashはどういう意味ですか?

更新#!/bin/bash#!/bin/shの間に違いはありますか?

+2

@anishsaneあなたのコメントは、この消えているファイルを書くように促しました。 echo -e '#!/ bin/rm \ nGoodbye! > vanish && chmod 700 vanish && ./vanish && cat vanish –

答えて

83

これはshebangと呼ばれ、実行時にスクリプトを解釈するプログラムをシェルに指示します。

この例では、スクリプトはbashシェルによって解釈され、実行されます。

他のいくつかの例shebangsは以下のとおりです。

#!/bin/sh — Execute the file using sh, the Bourne shell, or a compatible shell 
#!/bin/csh — Execute the file using csh, the C shell, or a compatible shell 
#!/usr/bin/perl -T — Execute using Perl with the option for taint checks 
#!/usr/bin/php — Execute the file using the PHP command line interpreter 
#!/usr/bin/python -O — Execute using Python with optimizations to code 
#!/usr/bin/ruby — Execute using Ruby 

と(ウィキペディアより)のような、私は私の頭の上から考えることができるいくつかの追加のもの、:

#!/bin/ksh 
#!/bin/awk 
#!/bin/expect 

たとえば、bashシバンを使用したスクリプトでは、bash構文でコードを記述します。シバンを期待するスクリプトでは、期待構文でコード化します。それは実際にシステム上を指して何/bin/shに依存

:更新された部分に

レスポンス。しばしば/bin/bashへのシンボリックリンクです。時には、ポータブルスクリプトはちょうどそれがシェルスクリプトだことを意味する#!/bin/shと書かれたが、それはその特定のシステム上/bin/shによって参照された方のシェル使用されている

+0

ありがとう!しかし、 '#!/ bin/bash'と'#!/ bin/sh'には違いがありますか? – Raptor

+1

@ShivanRaptor '#!/ bin/bash'このスクリプトはbashで実行します。 '#!/ bin/sh'はデフォルトのunixシェルである' sh'でこのスクリプトを実行することを意味します。これはbashやksh、dash、zshなどの他の変種かもしれません。 –

+0

'bash'が' sh'それは、 'bash'として実行されるときとは異なった(POSIXのような)動作をします。マニュアルを読む。その詳細をカバーしています。 –

10

最初の文字で(多分それは/bin/bash/bin/kshまたは/bin/zshを指します)スクリプトは#!です。これはshebangと呼ばれます。ファイルが #!/path/to/somethingで始まる場合は、標準でsomethingを実行し、残りのファイルをそのプログラムに入力として渡します。

#!/bin/bash,#!/bin/sh、さらには#!/bin/zshの違いは、ファイルの残りの部分を解釈するためにbash、sh、またはzshプログラムを使用するかどうかです。 bashshは伝統的に異なるプログラムです。いくつかのLinuxシステムでは、同じプログラムの2つのコピーです。他のLinuxシステムでは、shdashへのリンクであり、従来のUnixシステム(Solaris、Irixなど)ではbashは通常shとは全く異なるプログラムです。

もちろん、残りの行はshで終わる必要はありません。 #!/usr/bin/python#!/usr/bin/perl、さらには#!/usr/local/bin/my_own_scripting_languageでもかまいません。

+0

'sh'は通常互換モードを実行する' bash'ですが、これはbashがほとんどのLinuxディストリビューションのデフォルトシェルになってから真実です。それ以前の数年間はIIRCでした。 20. – ocodo

+0

私のDebianシステムとUbuntuシステムでは、 '/ bin/sh'はダッシュです。 Androidは 'ash 'を'/bin/sh'としていると言っています。 –

+1

@JoshuaDBoyd素晴らしいキャッチですが、(おそらくすべてではありませんが)多くのBSDユニックスは、デフォルトのシェルとしてAshを、Bashではなく、Debian/UbuntuでDashを使用しています。 Bashと同様に、Ash&Dashには両方とも互換モードがあります。 Solaris、Aix、HPUX、Ultrix、SCOなどに掘り下げれば、それぞれに独自のデフォルトシェルがあり、これは 'sh'エミュレーションを持ちます(POSIX準拠のままです)。 – ocodo

12

bashスクリプトでは、1行目の#!/ bin/bashはどういう意味ですか?

Linuxシステムでは、UNIXコマンドを解釈するシェルがあります。現在Unixシステムにはいくつかのシェルがあります。その中には非常に一般的なLinuxで長い歴史を持つbashというシェルがあります。これはデフォルトではLinuxのシェルです。

スクリプト(UNIXコマンドの集合など)を書くときには、使用できるシェルを指定するオプションがあります。一般的には、Shebangを使用して、指定したシェルを指定することができます(これはその名前です)。

スクリプトの先頭に#!/ bin/bashがある場合、システムにbashをデフォルトのシェルとして使用するように指示しています。

ここで2番目の質問になります:#!/ bin/bashと#!/ bin/shの違いはありますか?

答えははいです。 #!/ bin/bashに伝えると、環境/ osにコマンドインタプリタとしてbashを使用するよう指示します。これはハードコーディングされたものです。

すべてのシステムには、独自のシステムスクリプトを実行するためにシステムが使用する独自のシェルがあります。このシステムシェルは、OSによって異なる場合があります(ほとんどの場合、bashになります)。Ubuntuは最近デフォルトのシステムシェルとしてdashを使用しています。 #!/ bin/shを指定すると、システムは内部のシステムシェルを使用してシェルスクリプトを解釈します。

このトピックを説明した詳細については、linkを参照してください。

これはあなたの混乱を排除します...幸運を願っています。

関連する問題