POSIX シェルスクリプト shebang #!/bin/sh と #!/usr/bin/env sh の違いは何ですか?

POSIX シェルスクリプト shebang #!/bin/sh と #!/usr/bin/env sh の違いは何ですか?

私は最近多くのスクリプトを持ってい/usr/bin/envますシェルボーン。主に使用しているようです吹くそしてPythonでも、今までは一度もPOSIX sh( ash,, dash...).

私の意図が携帯性に優れているのなら、なぜ理由があるのだろうか。POSIXシェルスクリプトはenvこのアプローチの利点を享受できますか?


以下を使用するかどうかに関する一般的な合意はありますか?

  • 基準:

    #!/bin/sh
    
  • 環境:

    #!/usr/bin/env sh
    

これを完全に強調します。

私はこれを見たことがありませんsh

答え1

に設定すると、#!/bin/shファイルに直接移動します/bin/sh

パラメータ#!/usr/bin/env shとして実行するように設定します。これにより、スクリプトは明示的に実行されず、in変数を介して実行されます。/usr/bin/envshshPATH/bin/sh

答え2

他の多くの投稿(例:許可された回答これ)は、bin/shSolarisシステム(10以下)ではPOSIX互換シェルではありませんが、にあると述べました/usr/xpg4/bin/sh

この場合、#!/bin/shPOSIX規格であれば正しく動作しないことがあります。しかし、#!/usr/bin/env shそれが必要なシェルを指すかどうかは疑問です。

関連情報