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/bashwar 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 bashden 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?
envmö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.
/etcoder existieren /bin/sh. bashist ein Add-On für die meisten Unix-ähnlichen Systeme. Es ist nur Linux, wo bashes garantiert ist /binund 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/bashOpenBSD ist nichts installiert . Ein Scheiß auf #!/bin/bashWillensfehler und #!/usr/bin/env bashErfolg.