【发布时间】:2015-10-15 22:55:37
【问题描述】:
取以下代码:
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 不挂起?
理由:我希望使用准无名管道来连接几个异步运行的子进程,为此我需要在文件描述符指向它后删除管道:
mkfifo pipe
exec {fd}<>pipe
rm pipe
# use &$fd only
【问题讨论】:
标签: bash named-pipes io-redirection process-substitution