我尝试将标准错误重定向到具有受限权限的文件。这就是我所做的:
exec 2> >(umask 077; exec > stderr.log)
我们的想法是将标准错误重定向到进程,更改umask并再次重定向到日志文件。
但它不起作用。按 return 后,命令停止并以141结束。
Bash手册未在manual中定义“进程列表”。
有人可以解释失败吗?
答案 0 :(得分:3)
你应该在子进程内部使用cat
来写入(...)
内进程的stdin中的数据,这实际上是父进程的stderr:
exec 2> >(umask 077; cat > stderr.log)
进程替换将进程(或进程)的输出提供给另一个进程的stdin。只需执行exec > stderr.log
,您只需将子流程的stdout重定向到文件,但是您实际上并未在>(...)
内的任何内容中向stdout写入任何内容