Ich benutze :
exec >script.log 2>&1
in meinem Skript, um alle Ausgaben in eine Datei umzuleiten. Am Ende des Skripts möchte ich eine Nachricht auf dem Bildschirm drucken. Wie stoppe ich die Umleitung?
quelle
Ich benutze :
exec >script.log 2>&1
in meinem Skript, um alle Ausgaben in eine Datei umzuleiten. Am Ende des Skripts möchte ich eine Nachricht auf dem Bildschirm drucken. Wie stoppe ich die Umleitung?
Sie können exec
erneut aufrufen , um die ursprünglichen Deskriptoren wiederherzustellen. Sie müssen sie irgendwo gespeichert haben.
exec 3>&1 4>&2 1>script.log 2>&1
… logged portion …
exec 1>&3 2>&4
echo >&2 "Done"
Innerhalb des protokollierten Teils können Sie die ursprünglichen Deskriptoren für einen Befehl verwenden, indem Sie zu den zusätzlichen Deskriptoren umleiten.
echo "30 seconds remaining" >&3
Alternativ können Sie den protokollierten Teil Ihres Skripts in einen zusammengesetzten Befehl einfügen und diesen zusammengesetzten Befehl umleiten. Dies funktioniert nicht, wenn Sie die ursprünglichen Deskriptoren in einer Falle irgendwo in diesem umgeleiteten Teil verwenden möchten.
{
… logged portion …
} >script.log 2>&1
echo >&2 "Done"
>&3
macht dies zu meiner bevorzugten Lösung. Danke noch einmal)!Verwenden Sie additinal fd 3 und 4 für stdout und stderr und leiten Sie einfach 1 und 2 am Ende Ihres Skripts zu ihnen um:
quelle
exec 3>/dev/stdout 4>/dev/stderr -bash: /dev/stdout: Permission denied
Zuerst sollten Sie prüfen, ob Sie überhaupt eine Tty haben oder nicht.
quelle
tty
Dienstprogramm zu verwenden. Sie können zum speziellen Gerät umleiten/dev/tty
.