更改bash IO缓冲区设置

时间:2014-10-07 21:01:28

标签: linux bash io

我的代码如下:

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发生得太频繁(否则会额外检查)。

1 个答案:

答案 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