Как оказалось, в bash порядок указания перенаправлений имеет значение.
Рассмотри две команды:
a.out > outfile 2&>1
a.out 2&>1 > outfile
Кажется, что делают они одно и тоже, но это не так.
В первом случае в файл outfile перенаправляется stderr и stdout. А во втором случае в outfile окажется только stdout.
Попытаюсь объяснить почему.
В певом варианте, stdout перенаправляется в файл, а затем stderr перенаправляется туда же куда направлен stdout (то есть в файл).
Во втором случает, сначала stderr перенаправляется туда куда направлен stdout (например, в консоль), а после этого stdout перенаправляется в файл. То есть стандартный поток ошибок был перенаправлен туда же, куда и стандартный выходной поток до его перенаправления в файл outfile.