![设置 noclobber 时如何允许 >(进程替换)?](https://linux22.com/image/164871/%E8%AE%BE%E7%BD%AE%20noclobber%20%E6%97%B6%E5%A6%82%E4%BD%95%E5%85%81%E8%AE%B8%20%3E%EF%BC%88%E8%BF%9B%E7%A8%8B%E6%9B%BF%E6%8D%A2%EF%BC%89%EF%BC%9F.png)
如果我在交互式 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
必须>|
带有重定向符号 ( >
),而不是作为进程替换的一部分 ( >(…)
)。