<div class="gmail_quote">On Thu, Oct 1, 2009 at 8:58 PM, Josh More <span dir="ltr">&lt;<a href="mailto:morej@alliancetechnologies.net">morej@alliancetechnologies.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
You can reference them by their file descriptor (the number) or various<br>
variables depending on which standard libraries you wish to use.  What<br>
Ken did here was redirect Standard Error (2) into Standard Out (1) using<br>
the Bash method of 2&gt;&amp;1.  (Other shells may use other methods.)<br>
<br>
Thus, though it seems backwards, you have to remember that Bash parses<br>
the entire command line before it passes anything to the commands on it.<br>
 By moving the 2&gt;&amp;1 to the end, Bash doesn&#39;t see it as an argument to<br>
the commands, but does the redirection AND THEN runs the commands.  In<br>
effect,<br></blockquote><div><br>Bash will also &quot;parse out&quot; redirects regardless of where they are in a command.  These are equivalent for example:<br><br>    date &gt;/dev/null 2&gt;&amp;1<br>    &gt;/dev/null 2&gt;&amp;1 date<br>
<br>It&#39;s the order that&#39;s important, though.  Bash will parse the redirects in order so these read as &quot;redirect stdout (file descriptor 1) to /dev/null then redirect stderr (file descriptor 2) to the same file as file descriptor 1.&quot;<br>
<br>In the later email, where the redirects were out of order (&quot;2&gt;&amp;1 &gt;smb.log&quot;), stderr was redirected to the same as file descriptor 1 which was still going to the current terminal, then stdout was redirected to smb.log.<br>
<br>Just to complete the picture: There&#39;s a special case with pipes.  Pipes normally work with stdout, piping stdout of the command on the left into stdin of the command on the right.  The pipe file descriptors are set up first before other redirects are applied.  So the following reads &quot;create a pipe from stdout of command1 to stdin of command2, then redirect stderr of command1 into the same file as file descriptor 1 of command1 (the pipe)&quot;:<br>
<br>    command1 2&gt;&amp;1 | command2<br>    make 2&gt;&amp;1 | less<br><br>  -- Ken<br><br></div></div>