Antworten:
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"
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:
exec 3>&1 4>&2
exec >script.log 2>&1
echo "Some code"
exec >&3 2>&4
echo "Done"
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.
if tty -s; then
echo "Hello, World" > $(tty)
fi
tty
Dienstprogramm zu verwenden. Sie können zum speziellen Gerät umleiten /dev/tty
.
>&3
macht dies zu meiner bevorzugten Lösung. Danke noch einmal)!