Right. But it's much stranger than that.
cvs annotate >data.dat 2>&1
is the correct command. The wrong command is
cvs annotate 2>&1 >data.dat
See the very subtle difference? I sure didn't. Because it didn't work right away, I had to start debugging it -- was it really putting output into those two pipes? (yes). Can I pipe them each, one at a time? (yes) Can I google for the correct syntax (yes). Nowhere did I see the warning: you must do the 2>&1 pipe AFTER the >data.dat redirect.
Interestingly, if you first redirect output 1 (stdout), then pipe output 2 (stderr) into 1, then redirect output 1 to a diferent file, output 2 goes to the console. I'd expect it to go into one of the two files that 1 was redirected to. And output 1 eventually goes to the last file it was directed to.
ObLink: Microsoft badly documents the pipe operators at: