如果我在交互式 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
必须>|
带有重定向符号 ( >
),而不是作为进程替换的一部分 ( >(…)
)。