Verwendung von /usr/bin/env als Sha-bang

Verwendung von /usr/bin/env als Sha-bang

Ich würde gerne wissen, ob es Ihrer Meinung nach eine gute Vorgehensweise ist, diesen Kram zu verwenden:

#!/usr/bin/env bash

anstatt

#!/bin/bash

Dieser Artikelscheint für die Verwendung zu plädieren, /usr/bin/envaber wenn ich es verwende, tritt Skepsis auf.

Was ist deine Meinung?

Antwort1

In der Praxis #!/usr/bin/envist es auf fast jedes System portierbar, das es versteht #!. Es ist eine nützliche Redewendung zum Aufrufen eines Programms, das sich irgendwo in befinden könnte $PATH. Wenn Sie den Pfad zum Interpreter fest codieren, funktioniert Ihr Skript möglicherweise nicht, wenn Sie es auf eine andere Maschine kopieren.

Meine allgemeine Richtlinie besteht darin, #!/bin/shfür Skripte zu verwenden, die nur portable shFunktionen verwenden (d. h. nur POSIX-Funktionen, wenn mich nur moderne Unix-Systeme interessieren, und nur Bourne-Funktionen, wenn mich ältere Systeme wie ältere Solaris-Versionen interessieren) und #!/usr/bin/envandernfalls.

Ein Nachteil von #!/usr/bin/envist, dass Sie keine Optionen an den Interpreter übergeben können. Bei einigen Interpretern kann dies umgangen werden, indem die Optionen stattdessen als Anweisungen angegeben werden oder indem die zweite Zeile ein zweisprachiger Snippet ist, der den Interpreter aufruft, wenn er von sh ausgeführt wird, und nichts tut, wenn er vom Zielinterpreter ausgeführt wird. Es gibt eineallgemeine Perl-Redewendung, zum Beispiel (nützlich, um zu übergeben -T).

Antwort2

envist nur dann sinnvoll, wenn das Skript auf mehreren Systemen verwendet werden soll, auf denen der Speicherort der Binärdateien variieren kann. Wenn das Skript nur auf einem einzigen System oder in einem homogenen Netzwerk verwendet wird, ist es nicht erforderlich.

verwandte Informationen