[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bashscript und inetd



> -----Ursprüngliche Nachricht-----
> Von: Andre Frimberger [mailto:debian@frimberger.de]
> Gesendet: Dienstag, 1. April 2003 22:44
>
>
> mach ich ein echo $username, geht alles...
> das verrückt dadran ist:
> USERNAME="HALLLLLOOOOO";
> PASSWORD="TEEEEEEESSSST";
> echo $MOUNT_PATH -t smbfs -o username=$USERNAME,password=$PASSWORD -o ro
> -o debug=0 //$WINDOWS_COMPUTERNAME/$WINDOWS_SHARE $LOCAL_PATH;
> funktioniert.
> Aber kommen $username und $password von read, werden teile
> abgeschnitten ?!?
>
> ... ist irgendwie ziemlich wirr!
> (wehe es behauptet nochmal jemand Computer würden logisch
> sein ;-) )

Hallo Andre,

Wenn man weiß, woran es liegt, ist auch wieder alles ganz logisch ;-)
Wenn du das Script über inetd startest, kommen die Eingaben ja über TCP.
Und hier werden für Zeilenumbrüche 0x0D 0x0A verwendet und nicht, wie
unter UNIX üblich, nur 0x0A. Da die bash davon nix weiß, ließt sie beim
read eben solange, bis ein 0x0A kommt, und packt das 0x0D mit in deine
Variablen. Und da 0x0D ja Carriage Return heißt, fährt er beim echo den
Cursor immer schön an den Anfang der Zeile zurück und überschreibt dort
das bisher ausgegebene.
Hänge doch mal ein "| hexdump -C" an dein echo hinten dran, dann siehst
du, was ich meine.

Eine schnelle Lösung mit bash-Boardmitteln wäre, die beiden Variablen
nach dem read um das letzte Zeichen zu beschneiden:

username=${username:0:${#username}-1}
password=${password:0:${#password}-1}

Leider funktioniert das dann nicht mehr im Terminal sondern nur noch
per inetd. Aber es gibt sicher noch viele andere Wege, das Problem
zu beseitigen/zu umgehen.

Grüße
Michael



Reply to: