设置从命名管道读取的管道而不阻塞bash

Cha*_*ffy 7 unix bash shell pipe

我正在寻找一个子进程,其中一个文件描述符被打开到给定的管道,这样open()调用不会挂起,等待管道的另一端接收连接.

展示:

$ mkfifo /tmp/foobar.pipe
$ some_program --command-fd=5 5</tmp/foobar.pipe
Run Code Online (Sandbox Code Playgroud)

在这种情况下,some_program直到某个进程/tmp/foobar.pipe打开才能运行; 但是,some_program即使没有接收命令也会产生有用的效果,因此需要some_program立即执行所需的行为.

通过执行备用脚本语言(python,perl等)或/tmp/foobar.pipe使用O_NONBLOCK标志打开的C包装器来执行此操作的机制是显而易见的; 我正在寻找一种纯粹的bash解决方案,如果有可能的话.

Cha*_*ffy 9

在设置管道时打开FD读/写而不是只读可防止阻塞.

更具体一点:

$ mkfifo /tmp/foobar.pipe
$ some_program --command-fd=5 5<>/tmp/foobar.pipe
Run Code Online (Sandbox Code Playgroud)

防止出现不希望的阻塞行为,因为5<>/tmp/foobar.pipe在RW模式下打开(与在只读模式下打开相反5</tmp/foobar.pipe)虽然O_NONBLOCK仍然设置.感谢waldner on irc://irc.freenode.org/#bash这个指针.