/usr/bin/envをSha-bangとして使用する

/usr/bin/envをSha-bangとして使用する

あなたにとって、この she-bang を使用するのは良い習慣であるかどうかを知りたいです:

#!/usr/bin/env bash

の代わりに

#!/bin/bash

この記事の使用を推奨しているようです/usr/bin/envが、実際に使用すると懐疑的な見方が生まれます。

あなたの意見は何ですか?

答え1

実際には、#!/usr/bin/envは を理解するほぼすべてのシステムに移植可能です#!。 内のどこにでも存在する可能性のあるプログラムを呼び出すのに便利な慣用句です$PATH。 インタープリタへのパスをハードコードすると、スクリプトを別のマシンにコピーした場合にスクリプトが機能しない可能性があります。

私の一般的なポリシーは、#!/bin/sh移植可能な機能のみを使用するスクリプトsh(つまり、最新の unice のみを対象とする場合には POSIX 機能のみ、古い Solaris リリースなどの古いシステムを対象とする場合には Bourne 機能のみ) に を使用することです#!/usr/bin/env

の欠点は#!/usr/bin/env、インタープリタにオプションを渡すことができないことです。一部のインタープリタでは、代わりにオプションをディレクティブとして指定するか、2行目をshで実行されたときにインタープリタを呼び出し、ターゲットインタープリタで実行されたときには何もしないデュアル言語スニペットにすることで、これを回避できます。一般的な Perl の慣用句たとえば、 を渡すのに便利です-T

答え2

envバイナリの場所が異なる可能性がある複数のシステムでスクリプトが使用される場合にのみ役立ちます。スクリプトが単一のシステムまたは同種のネットワークでのみ使用される場合、これは必要ありません。

関連情報