Was ist der Unterschied zwischen diesen beiden Bash-Umgebungen?

Was ist der Unterschied zwischen diesen beiden Bash-Umgebungen?

Ich stelle fest bash, dass manche Leute bei Skripten eine andere siebangzu dem, was ich normalerweise ganz oben auf meine Liste setze.

Kann jemand den Unterschied zwischen diesen beiden vereinfachen? Ich verwende das #!/bin/basheine die ganze Zeit.

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

Antwort1

Die #!/usr/bin/env bashErgebnisse im Skript verwenden die Bash, die zuerst in gefunden wird $PATH.

Normalerweise befindet sich Bash unter /bin/bash. Es gibt aber auch Fälle, in denen dies nicht der Fall ist (verschiedene Betriebssysteme). Eine weitere mögliche Verwendung ist, wenn mehrere Bash-Shells installiert sind (neuere Version an einem anderen Ort wie /usr/local/bin/bash).

Dabei wird lediglich ein Verhalten des Dienstprogramms #!/usr/bin/env bashausgenutzt . Das Dienstprogramm wird normalerweise verwendet, um die Umgebung beim Aufrufen eines Programms zu manipulieren (beispielsweise um die Umgebung zu löschen). Wenn jedoch keine anderen Argumente als das auszuführende Programm angegeben werden, wird das angegebene Programm wie in ausgeführt .env
envenv -i someprog$PATH


Beachten Sie, dass dies sowohl Vor- als auch Nachteile hat.

Die Vorteile liegen wie bereits erwähnt darin, dass das Skript portierbar wird, wenn Bash an einem anderen Ort installiert ist oder /bin/bashzu alt ist, um die Dinge zu unterstützen, die das Skript zu tun versucht.

Der Nachteil besteht darin, dass es zu unvorhersehbarem Verhalten kommen kann. Da Sie dem Verhalten des Benutzers ausgeliefert sind $PATH, kann es dazu führen, dass das Skript mit einer Bash-Version ausgeführt wird, die ein anderes Verhalten aufweist als das, was das Skript erwartet.

verwandte Informationen