Mehrere Shebangs in einer einzigen Bash-Datei

8

Ich habe ein Skript von einer anderen Person, das einen Blick darauf hat (Hinweis: Es ist eine einzelne Datei):

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

Ich frage mich, was der Zweck des zweiten und dritten Schebangs ist. Ist es versehentlich oder absichtlich?

Barat Sahdzijeu
quelle
#!/bin/bashWird dem <<Konstrukt (hier Dokument) das Fremde vorangestellt als : some command <<end_of_script_flag?
Dan
Keine <<Konstrukte. Einfach nur Shebangs und einige Entfernungsbefehle (dies war ein Deinstallationsskript)
Barat Sahdzijeu
Es kann sein, dass das Skript aus Skripten zusammengestellt wurde, die nacheinander ausgeführt werden sollen, oder dass die Datei in mehrere unabhängige Skripte aufgeteilt werden sollte, die Aufteilung jedoch fehlgeschlagen ist. Was ist kurz vor den zusätzlichen #!Zeilen?
Gilles 'SO - hör auf böse zu sein'
@ Gilles, ich glaube keine zusätzlichen versteckten Zwecke dieses Skripts. Es ist ein statisches Skript mit dem Namen Uninstall.command(Plattform: Mac OS X).
Barat Sahdzijeu

Antworten:

9

Wenn diese Zeilen nicht der Anfang der zu erstellenden enthaltenen Shell-Skripte sind, dh innerhalb eines Schemas des Formulars:

cat <<end_of_shell_script >dynamically_built_shell
#!/bin/bash
[...]
end_of_shell_script

Dann ist das wiederholte Konstrukt, das Sie gefunden haben, das Ergebnis vieler copy- pastevollständiger Shell-Skripte, aber ohne ausreichende Sorgfalt und Verständnis für die Verwendung dieser ganz besonderen Kommentare in Zeile 1 der Skripte, beginnend mit #!.

Seien Sie vorsichtig, bevor Sie ein solches Shell-Skript verwenden (nein sudo, nein su:)).

Dan
quelle
Übrigens, viele Sudos sind da ... Jeezzz ...
Barat Sahdzijeu
/bin/rm(+ Dummy-Zeug zum Füttern des Roboters)!
Dan
3
... oder mehrere Bash-Skripte kombinieren, ähnlich wie sie ausgeführt würden, wenn Sie sourcesie mit Namen versehen würden. Ich sehe jedoch nicht die Notwendigkeit, dass das Gehirn einen Kommentar abgibt. Auf diese Weise ist es vollkommen zulässig und genau aus diesem Grund ist der Shebang eine Kommentarzeile.
0xC0000022L
Nach einem zweiten Blick bemerkte ich, dass sich einige andere Zeilen wiederholten, daher denke ich, dass es sich nur um unachtsames Kopieren und Einfügen aus mehreren Skripten handelt.
Barat Sahdzijeu
4

Kein Zweck, dies sind nur Kommentare. Es sei denn, 'einige Befehle' enthalten einige Befehle, die diese zur späteren Ausführung in einer separaten Datei speichern.

gena2x
quelle
Keine Schreibvorgänge und nachfolgenden Ausführungen. Dieses Skript ist nur eine Reihe von rmVorgängen, mit denen einige Anwendungen deinstalliert werden. Ich dachte, dass es mit dem Gabeln einer neuen Shell zusammenhängen könnte, aber anscheinend war es schmutziges Kopieren und Einfügen durch den Skriptersteller.
Barat Sahdzijeu
@BaratSahdzijeu Seien Sie vorsichtig mit zufälligen Skripten mit rm drin! Entschuldigung für die Kappen, aber ich kann nicht betonen, wie wichtig das ist. Wenn der ursprüngliche Autor die richtigen Fehler (oder besser gesagt die falschen Fehler) gemacht hat, kann dies andere Software auf dem Computer beschädigen und sogar das Betriebssystem beschädigen.
Nzall
Nate, danke! Eigentlich habe ich dieses Shell-Skript nicht ausgeführt. Ich habe es als Lernquelle für das Deinstallationsprogramm auf der Mac OS X-Plattform (Linux like OS) verwendet. Dachte, vielleicht hat es einen besonderen Geschmack von Bash, der eine Bedeutung hat. Shebang wird in einem Skript wiederholt.
Barat Sahdzijeu
Die #!gleiche Verwendung auf Kernel-Ebene (siehe man execve) auf jedem Unix-System (OpenBSD, FreeBSD, MacOS X, Kali-Linux…). Das bashsieht das einfach als Kommentar.
Dan
@NateKerkhofs Und was ist mv ln cp dd vi ...zusammen mit 200 anderen Befehlen? Warum betonen Sie sie nicht auch? Sie könnten sich ausgeschlossen fühlen.
ott--