我的代碼如下:改變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 4
的hello world
不會被清理。我認爲bash使用塊緩衝區打開這個文件,所以即使我在這裏有\n
,消息也不會被刷新。
所以我的問題是,如何使4
不緩衝或行緩衝?
通知,我不喜歡
echo hello world! >test.pipe
因爲程序會讀取EOF,這不是我的期望。
UPDATE:
或任何其他方式,我只是不想上節目側EOF發生得頻繁(額外的檢查突發其他)。
'stdbuf'命令不禁? (缺點 - 必須將其包括到每個輸出重定向中) – jm666 2014-10-07 21:20:58
@ jm666僅適用於標準io?如何在這裏處理我的需求? – HuStmpHrrr 2014-10-07 21:23:45
'(echo hello world>&4)'應該確保消息被刷新,但是是一個相當大的錘子(子殼)來修復一個小螺母。我假設'另一個程序'在後臺運行,否則不會阻止'exec'和'echo'執行。 – 2014-10-07 21:41:31