O motivo para ter separado stdout
e stderr
em primeiro lugar é distinguir entre a saída de dados do programa (que pode ser armazenada em um arquivo, alimentada para um pipeline, & c.) e diagnósticos e fluff ( que são realmente de interesse para um operador humano olhando para o terminal). (Não há nenhuma maneira automática de fazer o mesmo para entrada, mas você pode fazer isso com um pouco mais de dificuldade abrindo e lendo o dispositivo de terminal de controle em vez de stdin
.) Assim, se você tiver escolha entre escrever algo em stdout
ou stderr
, a melhor heurística é provavelmente "Esses dados serão de interesse de outro programa usando minha saída?" No entanto, isso pode ser dependente de programa e aplicativo e, portanto, não há uma regra de substituição única. (É por isso que há opções de substituição, como 2>&1
e assim por diante em bash
.)