Dienstag, 24. November 2015

My best shell script bug so far :)

Consider this Bourne shell script code:
if "$NEW_STATE" = "false"; then
    echo "Current failed."
fi
What's wrong with it?

I had this in a script and spent quite some time figuring out what was wrong as it kept writing "Current failed." though indeed nothing had failed. Having stared on it for several minutes, that piece of code seemed perfectly fine.

Again after some time and several trace and debug statements later I knew that the "$NEW_STATE" variable's value was indeed "true". So what was wrong?

Well, I had meant to write this:
if [ "$NEW_STATE" = "false" ]; then
    echo "Current failed."
fi
The shell does not evaluate expressions itself. It just calls commands, such like "test" (for which "[" is simply a copy, symlink or alias), but also "grep", "ls", "cp", whatever  you like. "true" is whatever returns 0.

Having forgotten the "[" I produced code that ran perfectly well - while just doing the opposite of what I had intended. Why did I not even get a syntax error, as the shell itself cannot handle string comparison itself?

The answer is simple: both "true" and "false" are commands themselves. Both take no arguments but don't complain either if any are given - arguments are just being ignored. My "$NEW_STATE" variable had a value of "true" because everything was fine. So my broken comparison expanded to this here:
if "true" = "false"; then
    echo "Current failed."
fi
The shell happily executes "true" which yields 0 (which is true for the shell) and does not bother to look at its arguments "= "false"". Good fun.

Mittwoch, 19. August 2015

DHL strikes again...

Wenn man denkt, es geht kaum noch schlimmer, wird man dann oft doch eines Besseren belehrt. Aus "Postamt" wurde "Empfänger unbekannt". Nachdem ich heute Morgen mit dem Versender telefoniert habe und der mir versicherte, die Adresse auf den Paket sei identisch mit der in der Auftragsbestätigung (und die ist korrekt), ging ein weiteres Schreiben an DHL heraus. Es spricht für sich:
Es ist erneut eine Sendung an mich nicht abgeliefert worden. Dieses Mal ist sie sogar an den Versender zurückgesandt worden. Meine Anschrift ist auf der Auftragsbestätigung korrekt, außerdem hat die Firma uns in der Vergangenheit schon einmal erfolgreich ein Paket zugesandt.

Ich war schon vorher äußerst unzufrieden, da wiederholt DHL-Boten, obwohl die ganze Zeit über jemand zu hause war, nicht klingelten und Sendungen in der Postfiliale zum Abholen ablieferten, was ich absolut unakzeptabel finde.

Nun bin ich stinksauer. Ich brauche die o.g. Sendung dringend bis zum Wochenende. Ich habe Ende vorletzter Woche bestellt, um ganz sicher zu gehen, dass ich sie rechtzeitig erhalte.

Ganz besonders, weil es nicht das erste Mal ist, dass Probleme bei der Zustellung auftreten und ich mich bereits mehr als deutlich beschwert habe, bin ich absolut erschüttert, dass es nicht nur wieder passiert, sondern auch mit viel gravierenderen Auswirkungen.

Sie werden für eine Dienstleistung bezahlt, also sorgen Sie dafür, dass die Leistung erbracht wird. Sie haben ein erhebliches Qualitätsproblem. Andere Anbieter, die ehemals einen schlechteren Ruf hatten, haben ihre Hausaufgaben gemacht, z.B. habe ich derartige Probleme wie mit Ihnen mit Hermes nie gehabt.

Ich kann zum aktuellen Zeitpunkt nur allen meinem Bekannten davon abraten, DHL zu verwenden, und ich werde in Zukunft darauf achten, dass, wenn ich online bestelle o.ä., ein anderer Versanddienstleister als DHL eingesetzt wird.

Wie schon letztes Mal geschrieben: Lieber zahle ich für den Versand ein wenig mehr, kann mich dann aber darauf verlassen, dass ich eine Sendung schnell und auch wirklich ins Haus erhalte, als am Ende meine Zeit zu verlieren, um Sendungen hinterher zu laufen bzw. zu telefonieren.

Bringen Sie Ihr Qualitätsproblem in Ordnung. DHL hat sich in den letzten Jahren einen zweifelhaften Ruf "erarbeitet", man braucht nur einmal google bemühen und findet oben gelistet reichlich Treffer, die genau die Probleme beschreiben, um die es hier geht. Peinlich ist dann, wenn, obwohl das bekannt ist, sich genau diese Dinge dann wieder bewahrheiten.

So sieht es aus. DHL ist bei mir nun wieder auf der schwarzen Liste - nicht grundsätzlich, aber so lange, bis sie mich überzeugt haben, dass sie ihr Qualitätsproblem gelöst haben. 

Ich frage mich dennoch, wie es dazu kommen kann. Bezahlen die ihre Boten so schlecht, dass es denen egal ist, oder setzen sie sie unter einen solchen Zeitdruck, dass sie nicht einmal auf unübersichtlichen (und das ist die elektronische Klingeltafel an unserer Haustür) Klingeltafeln ruhig die Namen abklappern, bis sie den jeweiligen Empfänger gefunden haben?

Wenn das bei einem Boten passiert, dann liegt es vermutlich am Boten. Wenn es beim selben Dienstleister immer wieder vorkommt, dann scheint mir das Problem woanders zu liegen.

Sei's drum. Wenn es hierzu neues gibt, werde ich das hier veröffentlichen.