if [ "z$?" != "z0" ] ; then ...

written by Martin HĂ€cker on

Aus dem Buildscript imageFromFolder.sh des MOKit Releases.

Da ich so etwas schon oft gelesen habe, habe ich mich endlich mal dafĂŒr interessiert wieso zum Teufel so viele Programmierer das so machen. Könnte ja sein, hab ich mir gedacht, das es einfach so kranke sh implementierungen gibt, dass man das so machen muss damit das wirklich auf allen Systemen lĂ€uft.

Nun, ein guter Hacker im CCC den ich darauf mal ansprach antwortete darauf mit dem Klassiker: "Die machen das doch nur alle weil sie das Manual nie gelesen haben!" :-) Gut, les ich mal nach...

Ok, also das Beispiel mal etwas detaillierter betrachtet:

hdiutil create # and then a lot of parameters

if [ "z$?" != "z0" ] ; then
    echo "Error creating image ($?)."
    exit 1
fi

Das hÀtte man doch in jedem fall auch so machen können:

hdiutil create # and then a lot of parameters

if [ 0 -ne $? ] ; then
    echo "Error creating image ($?)."
    exit 1
fi

Und das fÀngt den Sinn des Tests auch gleich viel besser ein.

Dann hĂ€tte man natĂŒrlich auch noch eine der Kurzformen wĂ€hlen können, sowas wie

hdiutil create mumble mumble \
    || echo "Error creating image ($?)." ; exit 1

Das ich persönlich fast noch etwas klarer finde - erst recht wenn man es in eine Funktion error_exit oder etwas Àhnlichem verpackt

error_exit ( )
{
    local exit_value=$?
    echo $1 "($exit_value)"
    exit $exit_value
}

hdiutil create mumble mumble \
    || error_exit "Error creating image."

Überraschenderweise ist das nĂ€mlich gar kein Problem so etwas in der Shell zu machen. Macht sich nur offenbar kaum jemand die MĂŒhe das "fine" manual mal zu lesen.

Oder zumindest so scheint es mir im Moment.