Administração de Linux
medium

Administração de Linux Question #019e3987

Question Statement
Administração de Linux
#1>&2
#redirection
#stderr
#stdout
#bash
Medium

Em Bash, inserir 1>&2 após um comando redireciona

A

erro padrão para entrada padrão.

B

entrada padrão para erro padrão.

C

saída padrão para erro padrão.

Correct
D

erro padrão para saída padrão.

E

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<&0 ou 2>&0? Na verdade, redirecionar stderr para stdin é incomum; 2>&0 redirecionaria 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 de 1>&2. Redireciona stderr para stdout.
  • E. saída padrão para entrada padrão. Isso seria 1<&0 ou 1>&0? Na verdade, 1>&0 redirecionaria 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.