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'

관련 정보