Ausgabe in der Shell umleiten
-
Hallo,
ich habe ein Programm, deren Ausgabe ich in ein Logfile umleiten lassen will.
Hier sollte aber noch das Datum und Uhrzeit hinzugefügt werden.So nach dem Motto: 'date and prog' >> logfile
Natürlich funktioniert es so nicht. Aber wie ?
Wie kann ich die Ausgabe vom Programm "prog" mit der Ausgabe vom Befehl "date" verbinden um danach beide in das logfile zu schreiben.Danke
worst_casePS: Es muß ein Einzeiler sein !!
-
echo `date` und hier kommt der text > dateiname
-
Abend,
und Danke für die schnelle Antwort.
Leider ist es nicht ganz so leicht.In will nicht einen Text mit Datum und Uhrzeit ausgeben, sondern im Einzeiler
soll ein Programm gestartet werden (z.B. prog) dessen Ausgabe soll mit der Ausgabe von Datum und Uhrzeit in ein Logfile geschrieben werden. (Das Programm wird später im Hintergrund gestartet und läuft natürlich weiter)Ich bin jetzt soweit: (date && prog) >> logfile.
Hier ist nur noch das Problem das jeweils für die Ausgabe von date bzw. prog jeweils eine Zeile in das logfile geschrieben wird, sowie es wird nur ein einziges mal geschrieben. Kommt eine 2. Meldung aus dem Programm "prog" heraus wird diese ignoriert.So Nov 13 23:33:52 CET 2005
Das ist die Zahl:-123.5Das sollte natürlich hintereinander in einer zeile stehen, bzw. alle Meldungen schreiben, solange das Programm "prog" läuft.
Danke
worst_case
-
Hi,
geht so:echo "`date` `prog`" >> log
MfG
AlexanderS
-
Hallo,
ich habe es probiert ist leider funktioniert es nicht.
Kann es sein das der Befehl date nur einmal das Datum liest und danach beendet ist.
Ich bin mit meinem Latein am Ende.Vielleicht ist es eine bessere Methode ein kleines Programm zu schreiben (sh/perl usw.)
das mit einer pipe mit dem "prog verbunden ist.
Über die stdin wird vom "prog" alle "print" Ausgaben übernommen, mit Datum versehen und danach in die logdatei geschrieben.z.B.
logprogramm | progAlles was im logprogramm (stdin) hereinkommt wird formatiert, mit Datum versehen und in die logdatei geschrieben.
Der Gedanke ist vielleicht nicht schlecht, nur an der Ausführung....wie macht man so etwas ?
Bin für jeden Tip dankbar.
worst_case
-
Hi
Probier es mal mit proc|sed -e s/^/"`date`"/ > log
Müsste eigentlich funktionieren!
gruss
perati
-
Hallo,
irgend etwas mache ich falsch.
proc >> log
funktioniert
proc | sed -e s/^/"`date`"/ > log
funktioniert nicht (überhaupt keine Reaktion, auch keine Fehlermeldung von der shell)
Ich verstehe das nicht, was kann die Ursache sein ?
Bin für jeden Tip dankbar.Danke
worst_casePS: Ich habe es mit mehreren Programmen probiert, überall keine Reaktion im Logfile
-
Vielleicht versaut Dir das Buffering gerade den Tag. sed empfängt die Zeilen nicht notwendigerweise sofort nachdem prog sie geschrieben hat...
cat /etc/hosts | sed s/^/`date`/ > log
funktioniert hier jedenfalls. Allerdings immer mit demselben Datum da `date` nur einmal interpretiert wird
-
Hallo,
das Datum sollte natürlich aktuell sein.
Es gibt doch irgend eine Möglichkeit das erst das "zweite" Programm (in diesem Falle "date" gestartet wird wenn das erste einen Rückgabewert liefert.
Ich hoffe ich hab es nicht geträumtDanke
worst_casePS: Zur Pufferung. Ich habe es ca. 2 Stunden laufen lassen...kein Erfolg
-
Dann scheint dein "prog" nichts auf stdout auszugeben. Die Zeile funktioniert eigentlich so. Habs mit cat /etc/hosts ja getestet (is ja nix anderes als Ausgabe von Zeilen auf stdout).
Das was Du meinst mit dem zweiten Programm starten wenn das erste einen Rückgabewert liefert (quasi sich beendet) ist normale lineare Befehlsverarbeitung oder??
prog
date # <- wird erst ausgeführt wenn prog geendet hatAber zum ursprünglichen Problem:
prog | perl -pe 's/^/localtime()/e;' >log
würde vor jede Zeile von prog das zum Zeitpunkt der Ausgabe aktuelle Datum setzen, statt dem Datum zur Startzeit von (im alten Beispiel) sed..
-
Und ob man doppel > verwendet?? hängt es nicht davon ab?
Ich bin nicht sicher aber ich glaube es gibt Unterschied zwischen
> und >> bei doppel>> wird die Datei angelegt und bei > geöffnet.
Oder irre ich mich?
Denn er sagt dass:
proc >> log
funktioniertproc | sed -e s/^/"`date`"/ > log
proc | sed -e s/^/"`date`"/ > log
Code:
proc | sed -e s/^/"`date`"/ > logund das nicht
-
Im Prinzip richtig aber genau umgekehrt
> = "erzeugen"
> = "anhängen"
Wobei Erzeugen gleichzeitig heisst dass die geleert wird falls schon vorhanden, und Anhängen heisst dass sie erzeugt wird, falls nicht vorhanden.
Allerdings tut das dem eigtl. Schreiben in die Datei keinen Abbruch mit welchem Modus sie geöffnet wurde
-
Heureka so geht es !!!!!!!!!!!!!!!!!!
die Verzögerung ist aber extrem.
Der Eintrag in das logfile dauerte am Anfang sicher 5-10 Minuten.
Ist eigentlich kein Problem, nur jetzt beim testen.Ein kleine Änderung hätte ich noch: Einen Doppelpunkt und 2 Leerzeichen nach dem Datum.
Ich weiß ich bin lästig.
Danke
worst_caseZusatz:
Ich habe festgestellt das wenn das "proc" nur einmal oder zweimal eine Meldung ausgibt, das diese Meldungen nicht in's Logfile geschrieben werden.
Wenn aber dauern Meldungen vom "proc" kommen dann werden diese nach ca. 10 Minuten ins Logfile geschrieben.
Pufferung schön und gut aber es darf nicht's (keine Meldung) verlierenZusatz:
Ich habe nun einen anderen Einzeiler getestetperl -e 'print $test++;' | perl -pe's/^/localtime()/e;'
Rückgabewert auf der Konsole: Sat Nov 19 09:22:47 20050
jedoch ein
perl -pe 'print $test++;' | perl -pe's/^/localtime()/e;'
bringt als Rückgabewert nicht's. Oder muss ich länger (> 5 Minuten) warten ob nicht doch noch etwas kommt ?
d.h.
?????????????????????????Ich frage mich schon ob es überhaupt möglich ist.
Danke
worst_case
-
Abend,
ich habe nun folgendes probiert
prog | perl -pe 's/^/localtime()/e;' >log
hier gibt es keinen Eintrag in die logdatei
Die Datei wird aber erzeugt.prog | perl -pe 's/^/localtime()/e;' >tty2
Auf dem Terminal 2 laufen die Meldungen....super
prog | perl -pe 's/^/localtime()/e;'
In der Konsole funktioniert es auch.
Ich habe es mit dem Logfile unter "root" und als Benutzer probiert.
keinen Erfolg.Ich weiß mir nicht mehr zu helfen.
Bitte dringend um Tips. Auch nur wenn ich etwas testen soll.Danke
worst_case
-
was passiert bei
prog 2>&1 | perl... ?