2012-01-08 9 views
16

シェルスクリプトで "#!/bin/sh"の使用/意味は何ですか?それがコメントされているかどうか、スクリプト内で考慮されるかどうかを教えてください。シェルスクリプトの "#!/ bin/sh"の使用/意味は何ですか?

+0

参照:https://en.wikipedia.org/wiki/Shebang_%28Unix%29 –

+5

[ "#!/ bin/sh"という行は、UNIXのシェルスクリプトを意味しますか?](http://stackoverflow.com/questions/7366775/what-does-the-line-bin-sh-mean-in-a-unix -shell-script) –

+0

http://theunixshell.blogspot.com/search/label/shebang – Vijay

答えて

1

これは、シェル実行可能ファイルが置かれているパスです。

20

スクリプトの先頭にあるsha-bang(#!)[1]は、このファイルが指示されたコマンドインタープリタに送られる一連のコマンドであることをシステムに伝えます。 #!実際には2バイトのマジックナンバー、ファイルタイプを指定する特別なマーカ、この場合は実行可能なシェルスクリプトです(この魅力的なトピックの詳細についてはman manicを入力してください)。 sha-bangの直後にはパス名があります。これは、シェル、プログラミング言語、またはユーティリティのいずれであれ、スクリプト内のコマンドを解釈するプログラムへのパスです。このコマンド・インタプリタは、スクリプト内のコマンド(sha-bang行の次の行)を開始し、コメントを無視してコマンドを実行します。 [3]

出典:http://tldp.org/LDP/abs/html/sha-bang.html#MAGNUMREF

0

これは、実行ビットがセットされている通常のファイルのためにOSによって使用されています。ファイルは、 "純粋な" バイナリ形式(すなわち、ELF、またはDWARF、または他)、OSの試みとして認識され、#!/path/to/interpreter -plus -optionsを読み取り、変換されていない場合:

myscript myargument 

へ:

また、argcとargvが正しいように調整します(つまり、argv [0]はスクリプト名、argv [1]はオプション1など)。

これは、perlスクリプト、pythonスクリプト、その他のものにも有効です。実際、あなたが選んだ通訳が何であれ。

0

それはdownvotersため


引用(even if /bin/sh is an alias to bash)直接実行時にスクリプトが互換モード(POSIX)で実行されます意味:

Bourneシェル、またはSHでしたUnixバージョン7のデフォルトのUnixシェルとほとんどのUnixライクなシステムは、Bourneシェルになる/ bin/sh、あるいは互換シェルへのシンボリックリンクやハードリンクを持っています。 。

http://en.wikipedia.org/wiki//bin/sh

と:バッシュもない限りバッシュ固有の機能(bashisms)で書かれた

シェルスクリプトは、Bourneシェルまたは置換のいずれかを使用してシステム上で機能しませんスクリプトは#!/ bin/shの代わりに#!/ bin/bashインタプリタ・ディレクティブの "shebang line"で始まります。

http://en.wikipedia.org/wiki/Bash_(Unix_shell)#Portability

+0

互換モードでは何もしません。それは#ではなく、bashの機能です!一般的には –

+0

あなたは間違っています、 '/ bin/sh'は実際にPOSIX互換システムのBourne-shシェルではなく、POSIXコンパイルシェルを意味します。使用しているシェルにかかわらずPOSIX-shコードを書いていることを示しています。これはbashの場合、互換モードで実行されるためです(他のシェルは動作が異なるかもしれませんが、POSIXを所有していることが唯一の保証です)。 –

+0

POSIX標準を参照するのではなく、2つの引用符を指定しました。最初のリンクは、#!/ bin/shで使用するとBashがPOSIXと互換性があると言うだけです。だから私はそれがまだあなたが記述しているbashの機能だと主張するだろうし、#!/ bin/shに関する一般的なものではない。 –

1

スクリプトは、スクリプトが常にではなく、別のシェルよりも、bashを使用して実行されなければならないことを意味し、最初の行の#!/ binに/ bashのを指定することもできます。/bin/shは、システムシェルを表す実行可能ファイルです。実際には、通常、システムシェルであるシェルの実行ファイルを指し示すシンボリックリンクとして実装されています。

関連する問題