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/env
aber wenn ich es verwende, tritt Skepsis auf.
Was ist deine Meinung?
Antwort1
In der Praxis #!/usr/bin/env
ist 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/sh
für Skripte zu verwenden, die nur portable sh
Funktionen 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/env
andernfalls.
Ein Nachteil von #!/usr/bin/env
ist, 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
env
ist 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.