Два вікна, той самий користувач, з bash-підказками. У вікні-1 тип:
$ mkfifo f; exec <f
Отже, bash зараз намагається прочитати з дескриптора файлів 0, який відображається на ім'я pipe f
. У вікні-2 введіть:
$ echo ls > f
Тепер вікно-1 друкує ls, а потім оболонка відмирає. Чому?
Наступний експеримент: знову відкрийте вікно-1 за допомогою exec <f
. У вікні-2 введіть:
$ exec 3>f
$ echo ls >&3
Після першого рядка вище вікно-1 прокидається і друкує підказку. Чому? Після другого рядка вище, вікно-1 друкує ls
вихід, і оболонка залишається живою. Чому? Насправді зараз у вікні-2 echo ls > f
не закривається оболонка вікна-1.
Відповідь повинна мати відношення до існування дескриптора файлу 3 з вікна-2 із посиланням на названу трубку ?!
exec 3>f
запуску перша оболонка надає підказку. (Дрібниця, ви мали в виду «в запису режимі» у Вашому коментарі?)
exec <f
,bash
не намагається прочитати зf
його спочатку намагається відкрити його.open()
Не повернусь до тих пір, поки який - то процес робить інші відкрита в режимі запису в трубу (в цей момент труба буде екземпляр, і оболонка буде зчитувати вхідні дані з нього).