一旦 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'