Как перенаправить в процесс подстановки?

Я попытался перенаправить стандартную ошибку в файл с ограниченными разрешениями. Вот что я сделал:

exec 2> >(umask 077; exec > stderr.log)

Идея заключалась в том, чтобы перенаправить стандартную ошибку в процесс, изменить маску и еще раз перенаправить в файл журнала.

Но это не работает. Команда останавливается и завершается с 141 после нажатия возврата.

Руководство Bash не определяет "список процессов" в руководстве.

Кто-нибудь может объяснить неудачу?

1 ответ

Решение

Вы должны использовать cat внутри подпроцесса для записи данных, поступающих в STDIN процесса внутри (...) который на самом деле является stderr родительского процесса:

exec 2> >(umask 077; cat > stderr.log)

Подстановка процессов направляет выходные данные процесса (или процессов) в стандартный поток ввода другого процесса. Просто делая exec > stderr.log вы просто перенаправляете стандартный вывод подпроцесса в файл, но на самом деле вы ничего не пишете в стандартный вывод внутри >(...)

Другие вопросы по тегам