2016-05-11 9 views
1

Wenn ich eine Konfigurationsdatei (Variablen definiert in Shell-Skript) oder Bibliotheksdatei (hat gemeinsame Funktionsdefinitionen) in meinem Hauptskript (die Shebang hat), brauche ich einen Shebang für diese Konfiguration Shell-Skript auch?Ist Shebang für Konfigurations- oder Bibliotheksshellskripte erforderlich?

Edit: Ich schließe die Konfigurationsdatei mit. oder Quelle Hauptdatei enthält #!/bin/sh shebang.

+0

Wie rufen Sie das Conf-Skript aus dem Hauptskript auf? – heemayl

+0

@heemayl check the edit – Patrick

Antwort

5

Hängt davon ab, wie Sie es nennen. Mit source oder . Befehle dann nein, wenn sie als Kind unter Verwendung nur des Skriptnamens aufrufen, dann ja.

Von Ihrer Beschreibung dann "Sourcing" die Dateien, so dass, #! wird nur ein Kommentar sein. Es kann auch ratsam sein, den Ausführungszugriff von diesen Dateien zu entfernen, damit sie nicht versehentlich als untergeordnete Prozesse bezeichnet werden.

(Wenn sie nicht „Quellen“ werden dann würden die Definitionen nur in den untergeordneten Prozess geschehen und wäre nutzlos)

EDIT folgende @triplee Kommentar:

Sie als Kind Prozess aufgerufen werden könnte mit (zum Beispiel) sh filename, bash filename, oder sogar (schaudern) csh filename. Alle diese Shells haben Unterschiede, so dass ein Vorteil einer #! Zeile als ein Kommentar ist, der angibt, für welchen Shell-Typ der Code geschrieben ist. Ich würde es jedoch nicht dafür verwenden, weil es auch bedeutet, dass es als Kind ausgeführt werden kann. Ich bin sicher, dass Sie Ihren Code bereits ausreichend kommentieren, aber es könnte sich lohnen, Kommentare hinzuzufügen, um die Shell anzuzeigen.

+1

Wenn Sie das Skript immer explizit mit 'sh script' oder' bash script' aufrufen, wird der Shebang offensichtlich ignoriert. Vielleicht auch darauf hinweisen, dass die beiden verschieden sind; 'sh' hat ein anderes Verhalten, auch wenn es sich um einen Symlink zu' bash' handelt. – tripleee

+0

@tripleee: danke für den Vorschlag – cdarke

+0

@tripleee Wie hat es ein anderes Verhalten, wenn Symlinked? – 123

0

#! mit einem Interpreter, sagen Bash, sollte nicht verwendet werden:

  1. Wenn Sie die vorhandenen Umgebungsvariablen verwenden möchten, ohne es zu exportieren.
  2. Wenn Sie eine Konfigurationsdatei auf das übergeordnete Skript aufnehmen möchten (Verwenden source oder . statt)

Der shebang der Interpreter das Skript ausführen macht, die die shebang selbst enthalten (ein Bootstrap-Mechanismus) und während dieser Ausführung Die Zeile mit Shebang wird nur als Kommentar betrachtet.

Da in diesem Fall eine neue Shell (Kind) erzeugt wird, wird die alte Umgebung vergessen und die Variablen, die nicht exportiert wurden, werden in der neuen Shell vergessen.

Verwandte Themen