如何在进程替换中重定向?

时间:2016-08-24 10:41:31

标签: bash process-substitution

我尝试将标准错误重定向到具有受限权限的文件。这就是我所做的:

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

我们的想法是将标准错误重定向到进程,更改umask并再次重定向到日志文件。

但它不起作用。按 return 后,命令停止并以141结束。

Bash手册未在manual中定义“进程列表”。

有人可以解释失败吗?

1 个答案:

答案 0 :(得分:3)

你应该在子进程内部使用cat来写入(...)内进程的stdin中的数据,这实际上是父进程的stderr:

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

进程替换将进程(或进程)的输出提供给另一个进程的stdin。只需执行exec > stderr.log,您只需将子流程的stdout重定向到文件,但是您实际上并未在>(...)内的任何内容中向stdout写入任何内容