Как перенаправить в процесс подстановки?
Я попытался перенаправить стандартную ошибку в файл с ограниченными разрешениями. Вот что я сделал:
exec 2> >(umask 077; exec > stderr.log)
Идея заключалась в том, чтобы перенаправить стандартную ошибку в процесс, изменить маску и еще раз перенаправить в файл журнала.
Но это не работает. Команда останавливается и завершается с 141 после нажатия возврата.
Руководство Bash не определяет "список процессов" в руководстве.
Кто-нибудь может объяснить неудачу?
1 ответ
Вы должны использовать cat
внутри подпроцесса для записи данных, поступающих в STDIN процесса внутри (...)
который на самом деле является stderr родительского процесса:
exec 2> >(umask 077; cat > stderr.log)
Подстановка процессов направляет выходные данные процесса (или процессов) в стандартный поток ввода другого процесса. Просто делая exec > stderr.log
вы просто перенаправляете стандартный вывод подпроцесса в файл, но на самом деле вы ничего не пишете в стандартный вывод внутри >(...)