
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'