Administração de Linux Question #019e3987
Em Bash, inserir 1>&2 após um comando redireciona
erro padrão para entrada padrão.
entrada padrão para erro padrão.
saída padrão para erro padrão.
erro padrão para saída padrão.
saída padrão para entrada padrão.
Official Explanation / Community Explanations
Resumo
Em Bash, 1>&2 é um operador de redirecionamento que redireciona o descritor de arquivo 1 (saída padrão) para o descritor de arquivo 2 (erro padrão). Isso é comumente usado para enviar a saída normal para o mesmo lugar que as mensagens de erro, por exemplo, quando você deseja combinar ambos os fluxos ou garantir que a saída de um comando seja tratada como erro. A resposta correta é C: saída padrão para erro padrão.
Como funciona
O Bash usa descritores de arquivo para gerenciar fluxos de entrada/saída. Por padrão, o descritor de arquivo 0 é a entrada padrão (stdin), 1 é a saída padrão (stdout) e 2 é o erro padrão (stderr). A sintaxe M>&N redireciona o descritor de arquivo M para uma cópia do descritor de arquivo N. Portanto, 1>&2 significa "faça o descritor de arquivo 1 apontar para o que o descritor de arquivo 2 aponta". Após esse redirecionamento, qualquer saída escrita em stdout irá para o destino de stderr (normalmente o terminal, mas pode ser redirecionado para outro lugar).
Por que a resposta correta está certa
A opção C afirma "saída padrão para erro padrão." Isso é exatamente o que 1>&2 faz: redireciona stdout (1) para stderr (2). Após o redirecionamento, tanto stdout quanto stderr escrevem no mesmo lugar (o fluxo stderr). Isso é útil para mesclar saídas ou para enviar saída normal para logs de erro.
Por que as outras opções estão incorretas
- A. erro padrão para entrada padrão. Isso seria
2<&0ou2>&0? Na verdade, redirecionar stderr para stdin é incomum;2>&0redirecionaria stderr para stdin, mas isso não é1>&2. Além disso, stdin é para entrada, não para saída. - B. entrada padrão para erro padrão. Isso seria
0>&2, que redireciona stdin para stderr. Mas stdin é um fluxo de entrada, então redirecioná-lo para um fluxo de saída não faz sentido no uso típico. - D. erro padrão para saída padrão. Isso é
2>&1, que é o oposto de1>&2. Redireciona stderr para stdout. - E. saída padrão para entrada padrão. Isso seria
1<&0ou1>&0? Na verdade,1>&0redirecionaria stdout para stdin, mas stdin é um fluxo de entrada, então escrever nele não é padrão. A sintaxe correta para redirecionar stdout para stdin não é comumente usada; normalmente você usa pipes ou substituição de processo.