Настройка чтения конвейеров из именованных каналов без блокировки в bash
Я пытаюсь вызвать подпроцесс с файловым дескриптором, открытым для данного канала, так что вызов open () не зависает в ожидании получения другой стороны канала.
Показывать:
$ mkfifo /tmp/foobar.pipe
$ some_program --command-fd=5 5</tmp/foobar.pipe
В этом случае,some_program
не запускается, пока какой-то процесс не/tmp/foobar.pipe
открыт для записи; тем не мение,some_program
имеет полезные эффекты, даже когда он не получает команды, поэтому желаемое поведениеsome_program
быть немедленно исполненным.
Механизмы, чтобы сделать это, выполняя через альтернативный язык сценариев (python, perl и т. Д.) Или обертку C, которые открывают/tmp/foobar.pipe
сO_NONBLOCK
флаг очевиден; Я ищу решение для чистого bash, если это возможно.