<br><br><div class="gmail_quote">On Wed, Jan 12, 2011 at 3:40 PM, Mike Miller <span dir="ltr">&lt;<a href="mailto:mbmiller%2Bl@gmail.com">mbmiller+l@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Regarding the system for keeping separate .out and .err files:  I find<br>
that the order of appearance on the terminal changes if the stderr and<br>
stdout are produced at almost the same time:<br>
<br>
$ ( echo &quot;stdout1&quot; ; echo &quot;stderr1&quot; 1&gt;&amp;2 ; echo stdout2 )<br>
stdout1<br>
stderr1<br>
stdout2<br>
<br>
So stderr was second, but here it is first:<br>
<br>
<br>
$ ( ( ( echo &quot;stdout1&quot; ; echo &quot;stderr1&quot; 1&gt;&amp;2 ; echo stdout2 ) | tee foo.out ) 2&gt;&amp;1 1&gt;&amp;3 ) 3&gt;&amp;2 | tee foo.err<br>
stderr1<br>
stdout1<br>
stdout2<br>
<br>
Adding a few milliseconds between makes it come out in order:<br>
<br>
$ ( ( ( echo &quot;stdout1&quot; ; sleep .01 ; echo &quot;stderr1&quot; 1&gt;&amp;2 ; sleep .01 ; echo stdout2 ) | tee foo.out ) 2&gt;&amp;1 1&gt;&amp;3 ) 3&gt;&amp;2 | tee foo.err<br>
stdout1<br>
stderr1<br>
stdout2<br> 
<br></blockquote><div><br>When you have two separate buffered streams going to the same file, there are no guarantees the temporal order will be preserved.  The bits hit the file when the buffers are flushed by the kernel.  If you&#39;re debugging a program that sends errors to stderr and output to stdout, an error message may appear well after the output on stdout that it was meant to be associated with.  <br>
<br>-Rob<br><br></div></div><br>