title: exec redirect messes up output order in bash
body: <p>I am using <code>&gt;(...)</code> to modify my output. It works but the order of the output is getting messed up and I'm not sure why.</p>
  
  <p>In the below code I:</p>
  
  <ol>
  <li>output some lines to the normal <code>STDOUT</code></li>
  <li>save the <code>STDOUT</code> and <code>STDERR</code></li>
  <li>modify the output of <code>STDOUT</code> and <code>STDERR</code> using exec and <code>&gt;(..)</code></li>
  <li>send output to the newly modified <code>STDOUT</code> and <code>STDERR</code></li>
  <li>revert to the original <code>STDOUT</code> and <code>STDERR</code></li>
  <li>send output to the original <code>STDOUT</code> and <code>STDERR</code></li>
  </ol>
  
  <p>I would expect the output to look like #1, #4, #6 but what I am getting is #1, <strong>#6, #4</strong>.</p>
  
  <pre><code>#!/bin/bash
  
  # output text to normal STDOUT
  echo '&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;'
  echo '&lt;html&gt;'
  echo "    &lt;head&gt;&lt;title&gt;daily backup script: ${now}&lt;/title&gt;&lt;/head&gt;"
  echo '    &lt;body style="font-family:monospace; font-size: 10px"&gt;'
  echo '        &lt;table border="1"&gt;'
  
  # save STDOUT and STDERR
  exec 6&gt;&amp;1
  exec 7&gt;&amp;2
  
  # modify STDOUT
  exec 1&gt; &gt;(
      while read line
      do
          echo "            &lt;tr&gt;&lt;td&gt;$(date +%Y-%m-%d)&lt;/td&gt;&lt;td&gt;$(date +%H:%M:%S)&lt;/td&gt;&lt;td colSPan='5'&gt;${line}&lt;/td&gt;&lt;/tr&gt;" &gt;&amp;6
      done
  )
  
  # modify STDERR
  exec 2&gt; &gt;(
      while read line
      do
          echo "            &lt;tr style='color: red'&gt;&lt;td&gt;$(date +%Y-%m-%d)&lt;/td&gt;&lt;td&gt;$(date +%H:%M:%S)&lt;/td&gt;&lt;td colSPan='5'&gt;${line}&lt;/td&gt;&lt;/tr&gt;" &gt;&amp;6
      done
  )
  
  # output to new modified STDOUT and STDERR
  echo "test"
  echo "test again" &gt;&amp;2
  date
  
  # revert to original STDOUT and STDERR
  exec 1&gt;&amp;6 6&gt;&amp;-
  exec 2&gt;&amp;7 7&gt;&amp;-
  
  # output text to normal STDOUT
  echo '        &lt;/table&gt;'
  echo '    &lt;/body&gt;'
  echo '&lt;/html&gt;'
  </code></pre>
  
  <p>I <strong>expect</strong> the output to look like this:</p>
  
  <pre><code>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
  &lt;html&gt;
      &lt;head&gt;&lt;title&gt;daily backup script: &lt;/title&gt;&lt;/head&gt;
      &lt;body style="font-family:monospace; font-size: 10px"&gt;
          &lt;table border="1"&gt;
              &lt;tr&gt;&lt;td&gt;2016-02-13&lt;/td&gt;&lt;td&gt;20:08:01&lt;/td&gt;&lt;td colSPan='5'&gt;test&lt;/td&gt;&lt;/tr&gt;
              &lt;tr style='color: red'&gt;&lt;td&gt;2016-02-13&lt;/td&gt;&lt;td&gt;20:08:01&lt;/td&gt;&lt;td colSPan='5'&gt;test again&lt;/td&gt;&lt;/tr&gt;
              &lt;tr&gt;&lt;td&gt;2016-02-13&lt;/td&gt;&lt;td&gt;20:08:01&lt;/td&gt;&lt;td colSPan='5'&gt;Sat Feb 13 20:08:01 EST 2016&lt;/td&gt;&lt;/tr&gt;
          &lt;/table&gt;
      &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>But this is the actual output:</p>
  
  <pre><code>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
  &lt;html&gt;
      &lt;head&gt;&lt;title&gt;daily backup script: &lt;/title&gt;&lt;/head&gt;
      &lt;body style="font-family:monospace; font-size: 10px"&gt;
          &lt;table border="1"&gt;
          &lt;/table&gt;
      &lt;/body&gt;
  &lt;/html&gt;
  user@hostname:/path/to/script$             &lt;tr style='color: red'&gt;&lt;td&gt;2016-02-13&lt;/td&gt;&lt;td&gt;20:11:29&lt;/td&gt;&lt;td colSPan='5'&gt;test again&lt;/td&gt;&lt;/tr&gt;
              &lt;tr&gt;&lt;td&gt;2016-02-13&lt;/td&gt;&lt;td&gt;20:11:29&lt;/td&gt;&lt;td colSPan='5'&gt;test&lt;/td&gt;&lt;/tr&gt;
              &lt;tr&gt;&lt;td&gt;2016-02-13&lt;/td&gt;&lt;td&gt;20:11:29&lt;/td&gt;&lt;td colSPan='5'&gt;Sat Feb 13 20:11:29 EST 2016&lt;/td&gt;&lt;/tr&gt;
  </code></pre>