Dua jendela, pengguna yang sama, dengan bash prompt. Di jendela-1 ketik:
$ mkfifo f; exec <f
Jadi bash sekarang mencoba membaca dari file descriptor 0, yang dipetakan ke pipa bernama f
. Di jendela-2 ketik:
$ echo ls > f
Sekarang window-1 mencetak ls dan kemudian shellnya mati. Mengapa?
Eksperimen selanjutnya: buka window-1 lagi dengan exec <f
. Di jendela-2 ketik:
$ exec 3>f
$ echo ls >&3
Setelah baris pertama di atas, jendela-1 bangun dan mencetak prompt. Mengapa? Setelah baris kedua di atas, window-1 mencetak ls
output dan shell tetap hidup. Mengapa? Bahkan, sekarang di window-2, echo ls > f
tidak menutup shell window-1.
Jawabannya pasti ada hubungannya dengan keberadaan file descriptor 3 dari window-2 yang mereferensikan pipa bernama ?!
exec 3>f
dijalankan, shell pertama kemudian memberikan prompt. (Poin minor, maksud Anda "dalam mode tulis " dalam komentar Anda?)
exec <f
,bash
tidak mencoba membaca darif
, itu pertama-tama mencoba untuk membukanya . Tidakopen()
akan kembali sampai ada beberapa proses melakukan buka lagi dalam mode tulis ke pipa (pada titik mana pipa akan dipakai, dan shell akan membaca input dari itu).