在 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'

相關內容