Você precisa fazer:
(command > stdout) >& stderr
Por exemplo:
(make foo > /dev/tty) >& error.txt
O primeiro >
redireciona o stdout para o tty, então o >&
redireciona o que sobrar para error.txt.
No seu caso, seria assim:
~> (make foo > /dev/tty) >& error.txt
~> cat error.txt
make: *** No rule to make target 'foo'. Stop.
Se você quiser que ambos exibam, e gravem em um arquivo, |&
é análogo a >&
, ou seja:
~> ( python err.py > /dev/tty ) |& tee error.txt
This is stdout
This is stderr
~> cat error.txt
This is stderr