Programmierung

Shebang

Letztens wunderte ich mich, warum ein Shell-Skript, das lokal einwandfrei lief, auf dem Server mit einer Fehlerausgabe aussetzte. Die beanstandete Zeile entspricht in etwa folgendem Code-Schnipsel:

if [[ $PATH =~ (^|:)$DIR(:|\$) ]]
then
  echo "$DIR is in the PATH"
fi

Anscheinend stimmte irgendetwas mit der Syntax des Vergleichs mit einem regulären Ausdruck nicht. Nach einer Weile fand ich dann jedoch heraus, der großen Suchmaschine sei Dank, dass vielmehr mein Shebang falsch war. (Ein Shebang, auch Sha-Bang geschrieben und mit unbetontem Schwalaut in der ersten Silbe ausgesprochen, ist kein weibliches Bang, sondern die erste Zeile eines Shell-Skriptes, die bestimmt, mit welchem Programm das Skript ausgeführt werden soll, und die mit dem auch als Lattenzaun bekannten Nummerzeichen und einem Ausrufezeichen beginnt.)

#!/bin/sh

Die Bash ist wegen ihres Funktionsreichtums und ihrer Komfortabilität so verbreitet, dass viele von uns meinen, sh sei ein Synonym für bash. In einigen Linux-Distributionen wie Debian und Ubuntu ist /bin/sh allerdings ein symbolischer Link, der mittlerweile standardmäßig nicht mehr bash, sondern mit dash belegt ist. Diese letztere Shell ist weniger umfangreich und performanter. Im Ubuntu-Wiki gibt es einen ausführlichen Artikel darüber. Wer ein Bashism wie das konditionale Konstrukt [[ =~ ]] verwendet, das vor etwa zehn Jahren in GNU Bash eingeführt wurde und nicht zum Posix-Standard gehört (s. Bash Reference Manual), sollte im Shebang also tunlichst auf Bash verweisen.

#!/bin/bash

30. März 2014 von Kai Yves Linden
Kategorien: Programmierung | Schlagwörter: , , | Kommentare deaktiviert für Shebang