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.