在 K/SH 中重新重定向 STDERR?

在 K/SH 中重新重定向 STDERR?

一旦 STDERR 被重定向,例如重定向到一个文件,如何将其重定向回原始文件描述符 2?

#!/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'

语境

此重定向解决方案应适用于 cron 作业。例如,如果 cron 执行外部脚本,该脚本将分别将 stdout 和 stderr 重定向到相关的日志和错误文件。但是,如果脚本中的执行失败或需要向作业所有者报告某些内容,我需要输出错误消息,以便 cron 接收它们并发送邮件。

答案1

尝试:

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

编辑1:

#!/usr/bin/env ksh

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

编辑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'

相关内容