Quando você compila um programa com gcc , existem diferentes tipos de saída: para stdout e stderr . Normalmente, o > direcionará stdout stream para um arquivo (por exemplo, o resultado de um printf("hello world\n"); é enviado para stdout ). No entanto, o stderr continua a ser enviado para a tela, já que é considerado "algo excepcional que você precisa saber".
Existe uma maneira de redirecionar o stderr para um arquivo - você faz isso com o seguinte comando (não muito intuitivo):
gcc new.c &> myFile
onde &> é "shorthand" para "redirecionar tudo". Como foi apontado por @CharlesDuffy, o formulário compatível com POSIX é
gcc new.c > myFile 2>&1
Isso significa "compile 'new.c' e envie stdout para myFile . E envie stderr (2) para o mesmo local que stdout ( &1 =" o mesmo lugar que stdout " ).
Você encontrará mais detalhes sobre diferentes redirecionamentos no link e link
A propósito, se você quiser enviar algo de dentro do seu programa especificamente para stderr , você pode fazê-lo com o seguinte
fprintf(stderr, "hello world - this is urgent.\n");
Se você incluir isso em um programa, executar o programa e enviar a saída "normal" para um arquivo, isso ainda aparecerá no console. Então, se você compilar o arquivo acima no executável urgent , digite
./urgent > /dev/null
no console, sua saída aparecerá na tela.