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 .)