Hallo Frank,
Diese Frage war schon behandelt
worden und liegt im Archiv.
(/t/linux-bash-in-jede-ausgabezeile-einen-zeitstempel…Leider komme ich mit dieser Beschreibung nicht ganz klar.
Die Perl-Lösung sieht doch gut aus. Woran hängt es denn konkret?
Folgendes habe ich schon probiert:
Leider schreibst Du ja nicht, wie bei deinen Lösungsversuchen das Ergebnis aussieht, was da noch fehlt, oder was gar nicht geht.
Da mein serieller Port gerade nicht mit mir reden will, habe ich ihn mal durch ein ping ersetzt:
#!/bin/bash
for i in {1..5}; do
echo $(date; ping -c1 localhost) \>\>log.txt
sleep 3
done
das liefert mir in log.txt diese Ausgabe (ping hab ich gekürzt):
Di 3. Apr 20:10:12 CEST 2012 PING localhost (127.0.0.1) 56(84) bytes of data
Di 3. Apr 20:10:15 CEST 2012 PING localhost (127.0.0.1) 56(84) bytes of data
Di 3. Apr 20:10:18 CEST 2012 PING localhost (127.0.0.1) 56(84) bytes of data
Di 3. Apr 20:10:21 CEST 2012 PING localhost (127.0.0.1) 56(84) bytes of data
Di 3. Apr 20:10:24 CEST 2012 PING localhost (127.0.0.1) 56(84) bytes of data
date solltest Du jetzt nach deinen Wünschen umformatieren, aber das Prinzip ist hoffentlich klar.
Aber ehrlich gesagt, keine Ahnung ob sich das für dein Problem so machen lässt, wenn Du das ping durch cat /dev/ttyS0 ersetzt.
Und muss es denn unbedingt mit der Shell gemacht werden, ein paar Zeilen in C würden das mit dem Datum eventuell erleichtern.
Du könntest auch syslog bzw. syslog-ng für deine Zwecke ausnutzen. Syslog sorgt dann selbst für das Datum und das Kommando logger schickt die Nachrichten an syslog, in deinem Fall also das, was Du vom seriellen Port einliest. Das ist jetzt bloß eine grobe Vorstellung, zum genauen Ausgestalten fehlt mir gerade die Geduld. Tipps zum Umgang damit gibt es hier:
http://de.linwiki.org/wiki/Linuxfibel_-_System-Admin…
http://www.wikidorf.de/reintechnisch/Inhalt/SyslogNG…
Ist vielleicht mit Kanonen auf Spatzen schiessen, hätte aber zumindest den Vorteil, daß Du mit logrotate täglich eine neue Datei anlegen kannst.
Viele Grüße
Marvin