Zum Inhalt springen

Exitstatus nach gepipten Programm


Gast Sanches

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :P


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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...