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_.