これら 2 つの bash 環境の違いは何ですか?

これら 2 つの bash 環境の違いは何ですか?

スクリプトではbash、人によっては違う シバンいつも自分の一番上に載せているものに。

誰かこの 2 つの違いを簡単に説明してもらえませんか? 私は#!/bin/bashいつも 1 つを使用しています。

#!/bin/bash
#!/usr/bin/env bash

答え1

#!/usr/bin/env bashで最初に見つかった bash を使用したスクリプトの結果$PATH

bash は にあるのが一般的ですが/bin/bash、 にない場合もあります (異なるオペレーティング システムの場合)。別の使用方法としては、複数の bash シェルがインストールされている場合 ( などの別の場所にある新しいバージョンの場合/usr/local/bin/bash) があります。

を実行すると、ユーティリティ#!/usr/bin/env bashの動作が利用されますenv
ユーティリティenvは通常、プログラムを呼び出すときに環境を操作するために使用されます (たとえば、env -i someprog環境を消去する)。ただし、実行するプログラム以外の引数を指定しないと、 にあるように指定されたプログラムが実行されます$PATH


これを行うには利点と欠点の両方があることに注意してください。

利点は前述のとおりで、bash が別の場所にインストールされている場合や、スクリプトが/bin/bash実行しようとしていることをサポートするには古すぎる場合でも、スクリプトを移植できるようになります。

欠点は、予期しない動作が発生する可能性があることです。ユーザーの に左右されるため$PATH、スクリプトが期待するものとは異なる動作をする bash のバージョンでスクリプトが実行される可能性があります。

関連情報