I\'m playing with i/o shell redirection. The commands I\'ve tried (in bash):
ls -al *.xyz 2>&1 1> files.lst
and
l
Redirections are:
1 for stdout (the default), and 2 for stderr), later redirections targeting that stream refer to the already-redirected version.1 as the target in an earlier redirection, what 1 means at that time is locked in, even if 1 is redirected later.Applied to the example from the question:
>file 2>&1:
>file first redirects stdout (file descriptor 1, implied by not prefixing > with a file descriptor number) to output file file2>&1 then redirects stderr (2) to the already redirected stdout (1).file.2>&1 >file:
2>&1 first redirects stderr to the then-original stdout; since file descriptor 2 participates in no further redirections, stderr output will therefore go to whatever stdout was defined as at that point - i.e., the original stdout, given that this is the first redirection.
>file then redirects the original stdout to file - but that has no effect anymore on the already locked-in redirection of stderr.file, while sent-to-stderr output is output to (the original, unredirected) stdout.