bashとshはスクリプトを別々に実行しますか? bashとshを使ってシェルスクリプトを実行し、同じ出力を得ました。では、違いは何ですか?
また、ちょうど実行したときに./executable
bashまたはshを使用しましたか?
ベストアンサー1
これは実行中のシステムによって異なります。多くのオペレーティングシステム、特にLinuxベースのオペレーティングシステムsh
ではbash
。
この場合、動作にはまだわずかな違いがあります。bash
呼び出すと、伝統的なBourneシェルに似ていますsh
が、まだほとんどのbashismを許可します。
Debianベースのオペレーティングシステムなど、他の一部のオペレーティングシステムでは代わりにsh
提供されています。これは、bashismをサポートせずにきちんとしたPOSIXシェル実装で設計されているため、より大きな違いを生み出します。dash
bash
dash
たとえば、sh
通常、POSIX 準拠によって提供される独自のオペレーティング システムでは bashism は実装されません。 Solaris 10以前では、PATHによっては、POSIX以前のBourneシェルになる可能性があります。ksh88
dash
sh
bash
それにもかかわらず、スクリプトは特定のコマンド、オプション、または構文を使用しないため、テストと同じ出力を取得できます。
を実行すると、./executable
どのシェルが実行されるかは、デフォルトで.executableスクリプトの先頭に作成されたshebangによって異なります。bash
shebangがこれを指定した場合:
#!/bin/bash
....
Shebangがなく、POSIX準拠のシェルからスクリプトを呼び出す場合、技術的には、スクリプトはsh
PATHの最初のスクリプトによって実行する必要があります。多くのシェルインタプリタはPOSIXを好み、bash
考慮しdash
てksh
スクリプトを解釈します。ここではSHELL
環境変数は使用されません。