Frage #4

Was bedeutet dieses #! am Beginn von Skripten?

Antwort:

Dies ist ein sogenannter „Shebang“, der dem Betriebssystem sagt wie das Programm ausgeführt werden soll. Deshalb folgt direkt nach dem Shebang der Pfad zum jeweiligen Interpreter. In den meisten Skriptsprachen wie Bash, Perl und Python steht das #-Zeichen für einen Kommentar, weshalb die Shebang-Zeile keinen weiteren Einfluss auf die Ausführung hat.
Hier ein Beispiel für einen sehr einfachen Perl-Skript:

#!/usr/bin/perl
print "Hello World!\n"

Diesen Code speichern wir als script.pl ab. Nachdem wir die Datei mit

chmod +x script.pl

oder über die grafische Oberfläche ausführbar gemacht haben, kann sie mit einem simplen

./script.pl

gestartet werden. Dabei wird die Datei automatisch an den in der Shebang-Zeile angegebenen Perl-Interpreter weitergegeben.
Das funktioniert wunderbar - aber nur wenn der Perl-Interpreter sich an diesem Pfad befindet. Ist hier ein falscher Pfad eingetragen, liefert uns die Shell eine Fehlermeldung. Angenommen wir haben einen Skript mit folgender Shebang-Zeile:

#!/bin/perl

Nun liefert uns die Shell vor der Ausführung folgenden Fehler:

bash: ./script.pl: /bin/perl: Defekter Interpreter: No such file or directory

Ganz lösen können wir dieses Problem nicht, aber zumindest können wir mit Hilfe von env unseren Skript einigermaßen portabel halten. env sucht in der PATH-Variable nach dem als Parameter angegeben Programm und führt dieses aus. Das bedeutet für unseren Skript:

#!/usr/bin/env perl
print "Hello World!\n"

Nun kann sich der Perl-Interpreter an beliebiger Stelle befinden - solange er über die PATH-Variable gefunden werden kann.