Uwe Ohse

Artikel

#! am Anfang von Shellscripten

Sollte man das #! /irgendein/interpreter am Anfang von Bourneshell- oder Csh-Scripten weglassen?
Subject:      Re: Batchdateien unter Linux
From:         uwe@ohse.de (Uwe Ohse)
Date:         1997/09/07
Message-ID:   <5utk0m$g7u$1@tirka.ohse.de>
Newsgroups:   maus.os.linux

Hallo Michael,

>es ist übrigens nicht unbedingt notwendig Hash-Bang (#!) zu benutzen.

nicht unbedingt, aber besser ist es.

>Damit wird nur sichergestellt, daß ein bestimmter Interpreter benutzt
>wird (bash, perl, etc.). Ohne Hash-Bang wird immer /bin/sh zur Abarbeitung
>des Scripts verwendet.

Der Kernel liefert, wenn er Shellscripte ausführen soll, die kein 
#! /int/er/preter
am Anfang stehen haben, ENOEXEC als Fehlermeldung zurück, und es ist
Sache der Shell, dann noch etwas vernünftiges zu machen.
tcsh, pdksh und tclsh machen es so daß sie "/bin/sh script" starten.
Die bash arbeitet da anders - sie führt das Script (in dem schon
geforkten neuen Prozess) selbst aus (und sollte der Sinn der Übung
der gewesen sein zu prüfen ob das Script fehlerfrei nicht nur unter
Bash, sondern auch unter einer primitiveren Shell laufen kann, dann
hat man Pech).

rc (die Plan9-Shell) führt Scripte ohne #! gar nicht erst aus.

Gruß, Uwe

Andreas Schwab ergänzte:

Und bei csh ist es noch merkwuerdiger: Wenn das Script mit : beginnt, wird es an /bin/sh weitergegeben, ansonsten selber ausgefuehrt.
In der Tat: _merkwürdig_.