Umleitungen vom Skript selbst
Sie könnten Umleitungen aus dem Skript selbst planen:
#!/bin/bash
exec 1>>logfile.txt
exec 2>&1
/bin/ls -ld /tmp /tnt
Durch die Ausführung wird Folgendes erstellt/angefügt logfile.txt
, enthaltend:
/bin/ls: cannot access '/tnt': No such file or directory
drwxrwxrwt 2 root root 4096 Apr 5 11:20 /tmp
Protokollierung in vielen verschiedenen Dateien
Sie könnten zwei verschiedene Protokolldateien erstellen und an eine anhängen Insgesamt Log und die Neuerstellung eines anderen zuletzt Protokoll:
#!/bin/bash
if [ -e last.log ] ;then
mv -f last.log last.old
fi
exec 1> >(tee -a overall.log /dev/tty >last.log)
exec 2>&1
ls -ld /tnt /tmp
Die Ausführung dieses Skripts bewirkt
- wenn
last.log
bereits existieren, benennen Sie sie um in last.old
(Überschreiben last.old
wenn sie existieren).
- eine neue
last.log
.
- alles anhängen an
overall.log
- alles auf dem Terminal ausgeben.
Einfach y kombinierte Protokolle
#!/bin/bash
[ -e last.err ] && mv -f last.err lasterr.old
[ -e last.log ] && mv -f last.log lastlog.old
exec 2> >(tee -a overall.err combined.log /dev/tty >last.err)
exec 1> >(tee -a overall.log combined.log /dev/tty >last.log)
ls -ld /tnt /tmp
Sie haben also
last.log
Protokolldatei des letzten Laufs
last.err
Fehlerdatei des letzten Laufs
lastlog.old
Protokolldatei des vorherigen Laufs
lasterr.old
Fehlerdatei des vorherigen Laufs
overall.log
angehängte Gesamtprotokolldatei
overall.err
angehängte Gesamtfehlerdatei
combined.log
angehängte kombinierte Gesamtfehler- und Protokolldatei.
- noch auf dem Terminal ausgeben
Und für interaktive Sitzungen verwenden Sie stdbuf
:
Wenn Sie dies in folgenden Bereichen verwenden möchten interaktiv Schale, müssen Sie sagen tee
seine Ein- und Ausgänge nicht zu puffern:
# Source this to multi-log your session
[ -e last.err ] && mv -f last.err lasterr.old
[ -e last.log ] && mv -f last.log lastlog.old
exec 2> >(exec stdbuf -i0 -o0 tee -a overall.err combined.log /dev/tty >last.err)
exec 1> >(exec stdbuf -i0 -o0 tee -a overall.log combined.log /dev/tty >last.log)
Sobald bezogen könnten Sie dies versuchen:
ls -ld /tnt /tmp