Today my boss pointed out something to me which is kind of shocking even though you already know how stupid the command processor is. Now we all know 2> is for redirecting stderr. Simply > or 1> is stdout. For stdin you use < or (less widely known) 0<.
But what if you do 3> or 4> or 5<? Surely it does not interpret that as some special file handle? Well, if you thought that, you’d be wrong. Just like I was. Try this:
echo Hi 3> out.txt
You’d expect to see Hi 3, wouldn’t you? But nooooo, you’ll see Hi instead.
Where does the 3 go? Well, the good interpreter thinks it’s a special file handle. Crazy isn’t it? But what if you really want to print Hi 3? What do you do? Thankfully the solution is easy and pretty obvious.
echo Hi 3 > out.txt
Yup, just put a space between 3 and >, and you’re good to go.