Ich habe an einer Reihe von Stellen gesehen, einschließlich Empfehlungen auf dieser Website ( Was ist der bevorzugte Bash Shebang? ), Um#!/usr/bin/env bash
bevorzugt zu verwenden #!/bin/bash
. Ich habe sogar ein unternehmender Einzel gesehen empfehlen die Verwendung #!/bin/bash
war falsch und bash Funktionalität würde , indem Sie so verloren.
Trotzdem verwende ich bash in einer streng kontrollierten Testumgebung, in der jedes im Umlauf befindliche Laufwerk im Wesentlichen ein Klon eines einzelnen Master-Laufwerks ist. Ich verstehe das Portabilitätsargument, obwohl es in meinem Fall nicht unbedingt anwendbar ist. Gibt es einen anderen Grund, #!/usr/bin/env bash
den Alternativen den Vorzug zu geben, und gibt es einen Grund, der die Funktionalität beeinträchtigen könnte, wenn die Portabilität ein Problem darstellt?
env
möglicherweise nicht bei /usr/bin
. Shebang Kommentare sind meiner Meinung nach insgesamt eine schlechte Idee. Wenn Ihr Standard-Skriptinterpreter keine Shebang-Kommentare verarbeitet, handelt es sich nur um einen Kommentar. Wenn Sie jedoch wissen, dass der Skriptinterpreter mit Shebang-Kommentaren umgehen kann, und Sie den Pfad zum Bash kennen, gibt es keinen Grund, ihn nicht über seinen absoluten Pfad aufzurufen, es sei denn, der Pfad ist zu lang (unwahrscheinlich), oder Sie portieren das Skript möglicherweise zu einem System, in dem sich keine Bash in / bin befindet. Andererseits gelten in diesem Fall die zuvor erwähnten Einschränkungen, da es sich um Portabilität handelt.
/etc
oder existieren /bin/sh
. bash
ist ein Add-On für die meisten Unix-ähnlichen Systeme. Es ist nur Linux, wo bash
es garantiert ist /bin
und höchstwahrscheinlich auch als /bin/sh
. Seit Linux für viele Menschen das moderne De-facto-Unix wurde, wurde die Tatsache vergessen, dass andere Systeme als Linux existieren könnten. In meiner eigenen Antwort unten habe ich Linux angenommen, weil Sie gesagt haben bash
. Viele der BSD-Boxen, mit denen ich gearbeitet habe, hatten es nicht einmal installiert.
/bin/bash
. Bash ist nicht standardmäßig installiert. Wenn du es willst, musst du pkg install bash
. Einmal installiert, befindet es sich bei /usr/local/bin/bash
. Auf /bin/bash
OpenBSD ist nichts installiert . Ein Scheiß auf #!/bin/bash
Willensfehler und #!/usr/bin/env bash
Erfolg.