İki pencere, aynı kullanıcı, bash istemleri. Pencere-1 yazın:
$ mkfifo f; exec <f
Bash şimdi adlandırılmış yöneltme ile eşlenen 0 dosya tanımlayıcısından okumaya çalışıyor f
. Pencere-2 yazın:
$ echo ls > f
Şimdi window-1 bir ls yazdırır ve sonra kabuk ölür. Neden?
Sonraki deneme: window-1 ile tekrar açın exec <f
. Pencere-2 yazın:
$ exec 3>f
$ echo ls >&3
Yukarıdaki ilk satırdan sonra, pencere-1 uyanır ve bir istem yazdırır. Neden? Yukarıdaki ikinci satırdan sonra, pencere-1 çıktıyı yazdırır ls
ve kabuk canlı kalır. Neden? Aslında, şimdi pencere-2'de, echo ls > f
pencere-1 kabuğunu kapatmaz.
Cevabın , adlandırılmış yöneltmeye referansta bulunan pencere-2 dosya tanımlayıcı 3'ün varlığıyla ilgili olması gerekir.
exec 3>f
çalıştırıldığında, ilk kabuk bir istem verir. (Küçük bir nokta, yorumunuzda " yazma modunda" demek istediniz ?)
exec <f
,bash
teşebbüs değildir okumak gelenf
, ilk çalışıyor açmak onu.open()
Boruya yazma modunda başka bir açık (ki borunun örneği olacak etmektedir, ve kabuk ondan giriş okuyacaktır) yaparak bir süreç vardır kadar döndürmez.