Wenn ich möchte, dass meine Skripte die Bash-Shell verwenden, ruft die Erweiterung .bash tatsächlich Bash auf oder hängt sie von der Systemkonfiguration / 1st-Shebang-Zeile ab. Wenn beide wirksam wären, aber unterschiedlich, welche hätten dann Vorrang?
Ich bin mir nicht sicher, ob ich meine Skripte mit .sh beenden soll, um nur "Shell-Skript" anzugeben, und dann in der ersten Zeile die Bash-Shell auswählen soll (z. B. #!/usr/bin/env bash
) oder ob ich sie nur mit .bash beenden soll (sowie mit der Einstellung für Zeile 1) ). Ich möchte, dass bash aufgerufen wird.
.bash
Erweiterung gesehen habe. Es ist auch Debian-Richtlinie, Skripte in Paketen zu haben, die in einem derbin
Ordner landen und keine Erweiterungen haben.Antworten:
Wenn Sie keinen expliziten Interpreter verwenden, wird der aufgerufene Interpreter von dem
shebang
im Skript verwendeten bestimmt. Wenn Sie speziell einen Interpreter verwenden, ist es dem Interpreter egal, welche Erweiterung Sie für Ihr Skript angeben. Die Erweiterung ist jedoch vorhanden, um anderen klar zu machen, um welche Art von Skript es sich handelt.Siehe, die
.py
Erweiterung des Bash-Skripts macht es nicht zu einem Python-Skript.Es ist immer ein
bash
Skript.quelle
Die Benennung des Skripts hat nichts damit zu tun, wie es ausgeführt wird.
Die shebang-Zeile definiert, mit welchem Interpreter das Skript ausgeführt wird.
Es ist mir persönlich egal, ob ein Skript sh, bash, perl ist oder nicht. Ich finde das Hinzufügen einer Erweiterung überflüssig. Ich werde tun
file scriptname
, um herauszufinden, was die Datei ist, wenn ich das wissen will.Wenn Sie also möchten, dass Ihr Skript ausgeführt wird
bash
, verwenden Sie#!/bin/bash
als erste Zeile.quelle
.sh
bedeutet das Fehlen einer -style-Erweiterung, dass es nicht erforderlich ist, es umzubenennen. (Zugegeben, nichts hindert ein C-Programm daran, eine Binärdatei mit einer.sh
Erweiterung zu erstellen. Es wäre nur verwirrend.)#!/usr/bin/env bash
für Portabilität, hier besprochen stackoverflow.com/a/10383546/54964