看看下面的代码:击重定向:命名管道和EOF
rm -f pipe
mkfifo pipe
foo() {
echo 1
sleep 1
echo 2
}
#1
exec 3< <(foo &)
cat <&3 # works
#2
foo >pipe &
cat <pipe # works
#3
exec 3<>pipe
foo >&3 &
cat <&3 # hangs
#4 -- update: this is the correct approach for what I want to do
foo >pipe &
exec 3<pipe
rm pipe
cat <&3 # works
为什么做法#3挂起,而有的则没有?有没有办法让方法#3不挂?
理由:我希望用准命名管道连接多个异步运行子过程,为了这个,我需要做一个文件描述符指向它后删除管:在方法3
mkfifo pipe
exec {fd}<>pipe
rm pipe
# use &$fd only
钉住它。 'exec 3 <>'使得主外壳成为编写器,这导致了EOF问题。 – Irfy
@Iffy我补充说。在情况1中,文件描述符3在主外壳中以只读方式打开。因此,管道永远不会有超过1个作者。 –
在此帮助下,我重写了删除管道的代码,以便按预期工作,谢谢。 – Irfy