スクリプトでは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 のバージョンでスクリプトが実行される可能性があります。