看看下面的代碼:擊重定向:命名管道和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