2

我在 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

这不是关键,所以我不会采用适当的同步,但我想我会打开自动刷新以至少减少这种影响。有没有简单的方法可以做到这一点?

更新:是的,冲洗不能正确修复它,但我已经看到它在一定程度上有助于这种情况,这就是我在这种情况下所需要的。只是不知道在Shell中怎么做

4

3 回答 3

1

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

于 2010-12-31T01:50:35.887 回答
1

尝试改变:

回显“文本”

至:

猫 << EOF
文本
EOF
于 2009-03-04T13:54:59.887 回答
0

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

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

冲洗对此无济于事,这是一个“适当的”并行竞争条件。

于 2009-03-04T11:32:05.503 回答