Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

Hey,

was ich natürlich vergessen habe zu erwähnen:

Im Script musst eben noch jeweils $? der einzelnen Kommandos überprüfen.

Bye

SystemError

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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.