我的代码如下:
mkfifo test.pipe
# execute another program at this point. it reads test.pipe(readonly), and falls asleep.
# the program will respond line by line.
exec 4>test.pipe
echo hello world >&4
但是我发现程序不会响应,因为fd hello world
中的4
没有刷新。我认为bash使用块缓冲区打开这个文件,所以即使我在这里有\n
,也不会刷新消息。
所以我的问题是,如何使4
不缓冲或行缓冲?
请注意,我不喜欢
echo hello world! >test.pipe
因为程序会读取eof,这不是我的期望。
更新:
或任何其他方式,我只是不希望程序方面的EOF发生得太频繁(否则会额外检查)。
答案 0 :(得分:1)
不明白这个问题,因为以下
mkfifo test.pipe
sed 's/.*/i am the sed>>&<</' < test.pipe & #pipe reader in bg
exec 4>test.pipe
for i in {1..5}
do
echo "$i to pipe wihout NL sleeping 2 secs"
echo -n hello world $i >&4
sleep 2
echo "now the NL - and the sed responds"
echo >&4
sleep 0.5
echo =====
done
sed
立即响应\n
。