144

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

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

4

3 に答える 3

182

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

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

他のいくつかのシバンの例は次のとおりです。

(ウィキペディアより)

#!/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 構文を使用してコードを記述します。一方、expect シバンを含むスクリプトでは、expect 構文などでコーディングします。

更新部分への対応:

システムで実際に何/bin/shを指しているかによって異なります。多くの場合、それは単に へのシンボリック リンク/bin/bashです。移植可能なスクリプトは#!/bin/sh、それがシェル スクリプトであることを示すためだけに で記述されることがありますが、その特定のシステムで によって参照されるシェルを使用します (おそらく、 、または/bin/shを指します) 。/bin/bash/bin/ksh/bin/zsh

于 2012-12-14T03:04:29.923 に答える
19

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

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

スクリプト (UNIX コマンドのコレクションなど) を作成する場合、使用できるシェルを指定するオプションがあります。通常、Shebang を使用してどのシェルになるかを指定できます(はい、それが名前です)。

したがって、スクリプトの先頭で #!/bin/bash を実行すると、システムに bash をデフォルトのシェルとして使用するように指示することになります。

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

答えはイエスです。#!/bin/bash を指定すると、コマンド インタープリタとして bash を使用するように環境/OS に指定されます。これはハードコードされたものです。

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

このトピックについて説明した詳細については、このリンクにアクセスしてください。

これで混乱が解消されることを願っています...頑張ってください。

于 2013-11-09T11:29:51.053 に答える
16

スクリプトの最初の文字が である場合、それはシバン#!と呼ばれます。ファイルが標準で始まる場合は、 ファイルの残りの部分を実行して、入力としてそのプログラムに渡します。#!/path/to/somethingsomething

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

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

于 2012-12-14T03:21:09.670 に答える