A sintaxe que você usou está errada.
cmd &2>1 >file
será dividido como
cmd &
2>1 >file
Isto irá:
- Executar
cmd
como um trabalho em segundo plano sem redirecionamentos - Em um processo separado (sem um comando!), você redirecionará
stderr
para um arquivo chamado literalmente de1
e redirecionarástdout
parafile
A sintaxe que você quer é:
cmd >file 2>&1
A ordem das operações é importante. Isto irá:
- Redirecionar
stdout
parafile
- Redirecionar
stderr
para&1
- ou seja, o mesmo filehandle questdout
O resultado é que stderr
e stdout
serão redirecionados para file
.
Em bash
, uma sintaxe não-padrão mais simples (e por isso não recomendo, por questões de portabilidade), a sintaxe de cmd &> file
faz a mesma coisa.