STDERR in K/SH neu umleiten?

STDERR in K/SH neu umleiten?

Wenn STDERR einmal umgeleitet wurde, beispielsweise zu einer Datei, wie kann es dann wieder zum ursprünglichen Dateideskriptor 2 umgeleitet werden?

#!/bin/sh
exec 2>/tmp/err
print -u2 'log errors to file'
exec 2>&2  (how do we do this???)
print -u2 'log errors to console'

Kontext

Diese Umleitungslösung sollte in einem Cron-Job funktionieren. Wenn Cron beispielsweise ein externes Skript ausführt, leitet dieses Skript stdout und stderr jeweils in die entsprechenden Protokoll- und Fehlerdateien um. Wenn jedoch eine Ausführung im Skript fehlschlägt oder dem Jobbesitzer etwas gemeldet werden muss, muss ich die Fehlermeldungen ausgeben, damit Cron sie empfängt und E-Mails sendet.

Antwort1

Versuchen:

#!/usr/bin/env ksh
exec 2>ksh_err.txt
print -u2 'log errors to file'
exec 2>`tty`
print -u2 'log errors to console'

Bearbeitung 1:

#!/usr/bin/env ksh

exec 8>err.txt
print -u8 'log errors to file'
print -u2 'log errors to console'

Bearbeitung 2:

#!/usr/bin/env ksh

exec 3>&2
exec 2>err.txt
print -u2 'log errors to file'
exec 2>&3
print -u2 'log errors to console'

verwandte Informationen