Stderr-Output _innerhalb_ eines Skripts in Logdatei schreiben

Laquestianne

Cadet 2nd Year
Registriert
Sep. 2009
Beiträge
25
Stderr in eine Datei umzuleiten ist ja an sich np. einfach
Code:
./script.sh 2>errorlog.txt
eingeben und fertig.

Allerdings habe ich 2 Wünsche, die diese Methode so nicht erfüllen kann.

Zum einen will ich eine Variable als Namen für das errorlog nehmen.

Zum anderen will ich, dass das im Skript an sich steht, dass stderr ans errorlog weitergeleitet wird, sodass man beim Aufruf nicht immer 2>blabla.txt dazuschreiben muss.


Achja, schön wärs außerdem, wenn stdout auch dazugeschrieben werden könnte und zwar so, dass der Kontext erhalten bleibt. Also dass z.B. die Fehlermeldung "FTP-Verbindung fehlgeschlagen: falsches Passwort" direkt unter "Verbinde zu FTP-Server..." steht. Und dann würd ich das Log noch direkt nach Programmstart auf der Shell mit cat ausgeben.
Allerdings würde ich dabei gerne vermeiden, dass im Skript an sich alle echos doppelt stehen müssen oder sowas; wenn das bei einem Skriptaufruf so einfach zu machen ist, sollte es doch auch innerhalb des Skripts einfach gehen, oder?
 
Laquestianne schrieb:
Stderr in eine Datei umzuleiten ist ja an sich np. einfach
Code:
./script.sh 2>errorlog.txt
eingeben und fertig.

Allerdings habe ich 2 Wünsche, die diese Methode so nicht erfüllen kann.
Zum einen will ich eine Variable als Namen für das errorlog nehmen.

#!/bin/bash
logfile=errorlog.txt
script.sh 2> $logfile

Laquestianne schrieb:
Zum anderen will ich, dass das im Skript an sich steht, dass stderr ans errorlog weitergeleitet wird, sodass man beim Aufruf nicht immer 2>blabla.txt dazuschreiben muss.
entweder im Skript hinter jedem Befehl umleiten:

#!/bin/bash
logfile=errorlog.txt
befehl1 2>$logfile
befehl2 2>>$logfile
befehl3 2>>$logfile

oder eine Liste von Befehlen in einer Subshell ausführen und zusammen umlenken

#!/bin/bash
logfile=errorlog.txt
(befehl1
befehl2
befehl3) 2>$logfile

Deinen letztes Wunsch habe ich wahrscheinlich nicht kapiert. Einfach stdout und stderr beide zusammen umlenken? "befehl &> logfile" in einer bash oder "befehl > logfile 2>&1" in einer sh.

Im Zweifelsfall "man bash" und nach "redirection" suchen ...
 
Zuletzt bearbeitet:
Vielen Dank :)

Ich habs jetzt so gemacht, dass ein zweites Skript das eigentliche Skript aufruft und dabei den Output in eine log.txt umleitet, die ich danach noch mit cat log.txt ausgebe; zur Laufzeit kann man nämlich keine Variable für den Namen des Skripts nutzen.
 
Zurück
Oben