Gast Sanches Geschrieben 18. August 2005 Geschrieben 18. August 2005 Hallo Zusammen, ich habe folgendes Problem. Habe ein Shellscript geschreiben, das mir mit hilfe von "tee" die Ausgabe am Bildschirm und in eine Logdatei schreibt. Schön und gut. Jedoch führe ich zuvor einige Befehle aus, bei denen ich den Exitstatus abprüfen müsste. Hier ein Beispiel: rm datei-die-es-nicht-gibt | tee test.log Führt man den Befehl aus, so erhält man den Exitcode 0, was zwar rein technisch gesehen richtig ist, jedoch logisch für mich unbrauchbar ist. Wenn ich nämlich aufgrund des Statuses ein weitere Aktion ausführen muss, hielft mir diese Konstellation nicht weiter, da immer der Exitstatus 0 kommt. Weis hierfür vll. jemand einen Tip, wie ich dies evtl. anders machen könnte? Wäre für alles dankbar! Ich brauche jedoch die Ausgabe in eine Logdatei. Gruss Sanches Zitieren
SystemError Geschrieben 18. August 2005 Geschrieben 18. August 2005 Hey, also ich weiss zwar nicht wie Du an den ExitStatus des gepipten Programmes rankommst, aber vielleicht hilft Dir ja das hier weiter: function logit { echo `/bin/date "+%Y-%m-%d %H:%M:%S"` "$1" "$2" >> $MYLOGFILE } ... logit INFO "FaselBlaBlubb" logit ERROR "FaselBlaBlubb" ... Ist ein KSH Beispiel. So erzeuge ich in den meisten meiner ShellScripte die LogAusgaben; ohne tee zu benutzen. Beim Aufruf des Scriptes achte ich dann darauf mit: meinscript.ksh >> $MYLOGFILE 2>&1 STDERR und STDOUT des gesamten Scriptes ebenfalls in die entsprechende LogDatei umzuleiten. Wäre das für Dich evtl. nützlich? Bye SystemError Zitieren
Gast Sanches Geschrieben 19. August 2005 Geschrieben 19. August 2005 Hey, also ich weiss zwar nicht wie Du an den ExitStatus des gepipten Programmes rankommst, aber vielleicht hilft Dir ja das hier weiter: ..... Hier ein kurzes Beispiel: Linux:~ # rm datei-die-es-nicht-gibt rm: cannot remove `datei-die-es-nicht-gibt': No such file or directory Linux:~ # echo $? 1 Linux:~ # rm datei-die-es-nicht-gibt | tee test.log rm: cannot remove `datei-die-es-nicht-gibt': No such file or directory Linux:~ # echo $? 0 Wie du siehst, kann er die Datei nicht finden, jedoch zeigt er mir bei der Anwendung von "tee" den Exitstatus 0 - der jedoch aufgrund der Tatsache mit der nicht gefundenen Datei nicht wünschendswert ist. Ich werde deinen Vorschlag mal testen. Vielen Dank schon mal. Gruss Sanches Zitieren
SystemError Geschrieben 19. August 2005 Geschrieben 19. August 2005 Hey, was ich natürlich vergessen habe zu erwähnen: Im Script musst eben noch jeweils $? der einzelnen Kommandos überprüfen. Bye SystemError Zitieren
Gast Sanches Geschrieben 26. August 2005 Geschrieben 26. August 2005 hallo zusammen, hi SystemError, vielen Dank für den Hinweis. Ich hab das ganze mal ausgibig getestet und es funktioniert. Ich habe deinen Vorschlag mit der Funktion genutzt. Hier ein Beispiel: function arbeite { echo `blablabla` echo $? if .... } ... arbeite 2>&1 | tee -a logdatei.log ... Somit wird im Beispiel die Funktion auf dem Bildschirm ausgegeben UND in eine Logdatei geschrieben. Zudem lässt sich nun der korrekte Exitstatus auswerten. Vielen Dank für den Hinweis. :uli Gruss Sanches Zitieren
dr.disk Geschrieben 29. August 2005 Geschrieben 29. August 2005 Um an exit-Codes von Programmen aus einer Pipe ranzukommen gibt's in der bash die Variable PIPESTATUS. Folgendes Beispiel zeigt die Kette von ddate an cat und zuletzt false - damit auch auf jeden Fall auch was 'falsches' kommt rofa:~ # ddate | cat | false rofa:~ # echo ${PIPESTATUS[@]} 0 141 1 rofa:~ # Einzelne Werte kann man natürlich auch abfragen, z.B. mit ${PIPESTATUS[1]}. Würde im obigen Beispiel 141 ergeben. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.