设置 noclobber 时如何允许 >(进程替换)?

设置 noclobber 时如何允许 >(进程替换)?

如果我在交互式 shell ( set -o noclobber) 中设置了 noclobber,我注意到进程替换不起作用:

# echo hello > >(cat)
-bash: /dev/fd/62: cannot overwrite existing file

如果我永久关闭 noclobber ( set +o noclobber) 它工作正常:

# echo hello > >(cat)
hello

我尝试用>|这样的方法覆盖 noclobber:

echo hello > >|(cat)
-bash: syntax error near unexpected token `>|'

有没有办法暂时禁用noclobber?

更新:实际上,当输出进入进程替换时, noclobber 生效似乎是不合理的,因为没有文件会被“破坏”。似乎总是使用>|2>|覆盖 noclobber 来防止“无法覆盖现有文件”错误,以防 noclobber 无意中打开,这似乎是一个很好且安全的做法。

答案1

使用与文件相同的方式覆盖 noclobber >|

# echo hello >| >(cat)
hello

必须>|带有重定向符号 ( >),而不是作为进程替换的一部分 ( >(…))。

相关内容