
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'