Normalerweise wird ein Shell-Skript von Ihrer Standard-Shell ausgeführt, die in der Datei/etc/passwd definiert ist. Sie können jedoch explizit ein Programm definieren, mit dem Ihr Skript ausgeführt werden kann.
Unices verwendet eine allgemeine Methode, um festzustellen, welches Programm zum Ausführen eines bestimmten Skripts benötigt wird (man execve(2)). Wenn das Skript über die richtigen Ausführungsrechte verfügt und in einem Skript die erste Zeile mit #!
Zeichen beginnt, wird es von dem später definierten Programm ausgeführt.
Zum Beispiel, wenn die erste Zeile ist #!/usr/bin/awk -f
dann wird der Rest der Datei in das awk
Programm übergeben werden (so es awk
Syntax verwenden hat). Oder wenn ein Makefile mit #!/usr/bin/make -f
startet, wird der Rest der Datei an make
übergeben. Sie können das Skript als normales Programm starten und das Skript kann in awk
oder make
(oder was auch immer definiert) Syntax geschrieben werden.
Wenn execve
#!
nicht als die ersten beiden Zeichen der Datei findet, wird es als normale Skriptdatei betrachtet und es wird ausgeführt wie es ist.
So mit #!
Sie können die Skriptsprache bestimmen und Sie müssen nicht wissen, welche Shell von dem anderen Benutzer mit Ihrem Skript verwendet wird. In jeder anderen Zeile #!
wird Ihre Standard-Shell interpretiert, die in der Regel nur eine Kommentarzeile ist.
Es wäre einfacher, wenn Sie Skripte mit den Code-Tags umgeben. Unregelmäßige Schriftart macht es wirklich verwirrend ... – user1581900
#!/Bin/sh gibt den Pfad zur Shell an, der für das Skript verwendet werden soll. Die ähnliche Frage wurde hier beantwortet: http: // stackoverflow.com/questions/8967902/why-do-you-müssen-put-bin-bash-am-anfang-einer-script-datei – user1581900
möglich duplizieren ... http: //stackoverflow.com/questions/7366775/what-does-the-line-bin-sh-gemein-in-einem-unix-shell-script – Peeyush