Acho mais fácil pensar em usar atribuições.
-
>
é como=
-
&
é como$
Você começa com
1 = /dev/tty
2 = /dev/tty
então seu primeiro exemplo, 1> file.txt 2>&1
, faz
1 = file.txt
2 = $1 # and currently $1 = file.txt
deixando você com
1 = file.txt
2 = file.txt
Se você fez do outro jeito, novamente você começa com
1 = /dev/tty
2 = /dev/tty
então 2>&1 > file.txt
faz
2 = $1 # and currently $1 = /dev/tty
1 = file.txt
para que o resultado final seja
1 = file.txt
2 = /dev/tty
e você redirecionou apenas stdout
, não stderr
.