通常、シェルスクリプトには、スクリプトファイルの最初の行に次のコメントが含まれています。#!/bin/sh 。私が行った調査によると、これは「ハッシュバン」と呼ばれ、従来のコメントです。このコメントは、このファイルがディレクトリ/binの下のBourneShellによって実行されることをUnixに通知します。 。
私の質問はその時点から始まります。今まで私は#!/bin/bashのようなこのコメントを見たことがありません 。常に#!/bin/shです 。ただし、UbuntuディストリビューションにはBourneShellプログラムがありません。彼らはBourneAgainShell(bash)を持っています。
その点で、コメント#!/bin/shを配置するのは正しいですか。 Ubuntuディストリビューションで書かれたシェルスクリプトで?
承認された回答:
#!/bin/sh すべてのUnixおよびUnixライクなディストリビューションで動作するはずです。スクリプトがPOSIXに準拠している限り、これは一般的に最も移植性の高いハッシュバンと考えられています。 /bin/sh シェルは、実際のシェルが/bin/shになりすましているものに関係なく、POSIXシェル標準を実装するシェルであると想定されています。 シェル。
#!/bin/sh Bourneシェルが維持されなくなったため、通常は単なるリンクになります。多くのUnixシステムでは/bin/sh /bin/kshへのリンクになります または/bin/ash 、多くのRHELベースのLinuxシステムでは、/bin/bashへのリンクになります ただし、Ubuntuおよび多くのDebianベースのシステムでは、/bin/dashへのリンクです。 。 shとして呼び出された場合のすべてのシェル 、POSIX互換モードに入ります。
ただし、ハッシュバンは、スクリプトが厳密にPOSIXに準拠している限り(重要性を強調するために繰り返される)、他の方法よりもはるかに優れた移植性を可能にするため、重要なプレースホルダーです。
注:bashの場合 POSIXモードで呼び出されても、[[などのPOSIX以外のものは引き続き許可されます。 、配列など。 bash以外では失敗する可能性があります システム。