In bash, if you put:
ls /Users/*/.ssh/id_rsa 2>&1 > rsa-keys.log
…you’re redirecting stderr to the stdout’s destination while stdout is still sending output to the screen. So any permission errors encountered will go to the screen, not to rsa-keys.log.
From the bash manpage:
==================
Note that the order of redirections is significant. For example, the command
ls > dirlist 2>&1
directs both standard output and standard error to the file dirlist, while the command
ls 2>&1 > dirlist
directs only the standard output to file dirlist, because the standard error was duplicated from the standard output before the standard output was redirected to dirlist.
==================
Commands given to the shell are evaluated and processed in a specific order and fashion, and this is one quirk of that that many people are unaware of.
As true as this can be, it’s counterintuitive.
What would be more intuitive? It seems to me to be a
a=1 b=a a=2
Where you’d expect b to be 1, which is the case for bash.