我在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中做到这一点
答案 0 :(得分:1)
尝试更改:
echo "text"
要:
cat << EOF text EOF
答案 1 :(得分:1)
我通常使用尾随|grep -F --line-buffered ''
作为一种廉价且可靠的方式来强制执行行缓冲。还有来自 moreutils 的sponge
来延迟所有输出,直到输入完成并关闭。
答案 2 :(得分:0)
为什么你认为潮红会有帮助? echo完成的写入包括换行符,因此如果第一个脚本在第二个脚本之前运行完成,则换行符已经在那里。
在输出中它不是,这表示第二个脚本在第一个脚本完成之前运行,因此交错输出。
法拉盛对此没有帮助,这是一个“适当的”并行竞争条件。