Bourne Shell中的flush输出

时间:2009-03-04 11:27:29

标签: linux shell upstart

我在Upstart脚本中使用echo来记录事物:

script
    echo "main: some data" >> log
end script

post-start script
    echo "post-start: another data" >> log
end script

现在这两个并行运行,因此在日志中我经常看到:

main: post-start: some data another data

这并不重要,所以我不会采用正确的同步,但我认为我会将自动冲洗设置为ON,以至少减少此效果。有没有一种简单的方法可以做到这一点?

更新:是的,刷新将无法正确修复它,但我已经看到它在某种程度上帮助了这种情况,这就是我在这种情况下所需要的。只是我不知道如何在Shell中做到这一点

3 个答案:

答案 0 :(得分:1)

尝试更改:

echo "text"

要:

cat << EOF
text
EOF

答案 1 :(得分:1)

我通常使用尾随|grep -F --line-buffered ''作为一种廉价且可靠的方式来强制执行行缓冲。还有来自 moreutils sponge来延迟所有输出,直到输入完成并关闭。

答案 2 :(得分:0)

为什么你认为潮红会有帮助? echo完成的写入包括换行符,因此如果第一个脚本在第二个脚本之前运行完成,则换行符已经在那里。

在输出中它不是,这表示第二个脚本在第一个脚本完成之前运行,因此交错输出。

法拉盛对此没有帮助,这是一个“适当的”并行竞争条件。