I have been trying to figure out the relationship between file descriptors. One thing I don't understand is, how is:
ls -l /bin/usr > ls-output.txt 2>&1
ls -l /bin/usr 2>&1 >ls-output.txt
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.Sign up to join this community
The order of the redirection is important as they are executed sequentially:
fd 1) will point to
filename and afterwards the
fd 2) will point to the the target of
stdout in this example
That means that both
stderr get redirected to
fd 2) will point to the target of
stdout and afterwards
fd 1) will redirect to
This means that
stderr will redirect to the original target of
stdout gets redirected to
So in short the order of redirects is important as each filedescriptor is independent of each other.
For further information have a look at some other questions and answers such as:
a>&b redirects fd a to fd b. if a is not given, 1 is assumed. 1 is stdout and 2 is stderr.
Some shells (e.g. Bash) also let you specify &> file to redirect both at the same time. However, > 2>&1 is more portable.