
После перенаправления 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'