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