Administração de Linux
medium

Administração de Linux Question #019e3987

Question Statement
Administração de Linux
#stdout-redirection
#file-descriptor
#overwrite
#shell-redirection
#1>
Medium

Qual das seguintes afirmações está correta em relação ao comando foo 1> bar?

A

A saída padrão do comando foo é anexada ao arquivo bar.

B

A saída padrão do comando foo sobrescreve o arquivo bar.

Correct
C

O comando foo recebe sua entrada padrão (stdin) do arquivo bar.

D

O comando foo recebe sua entrada padrão (stdin) da saída padrão (stdout) do comando bar.

E

O stderr do comando foo é salvo no arquivo bar.

Official Explanation / Community Explanations

O comando foo 1> bar redireciona a saída padrão (stdout) do comando foo para o arquivo bar, sobrescrevendo o arquivo se ele já existir. O número 1 representa o descritor de arquivo para stdout, e o operador > realiza o redirecionamento da saída com truncamento (sobrescrita).

Como funciona

Nos shells Unix/Linux, cada processo possui três descritores de arquivo padrão: stdin (0), stdout (1) e stderr (2). O operador > redireciona a saída padrão (stdout) para um arquivo, criando-o ou sobrescrevendo-o. A sintaxe 1> é explícita, mas > sozinho já redireciona stdout por padrão. Para anexar em vez de sobrescrever, use >>.

Por que o valor correto está certo

A afirmação "A saída padrão do comando foo sobrescreve o arquivo bar" está correta porque 1> trunca o arquivo de destino antes de escrever. Este é o comportamento padrão do redirecionamento com > simples.

Por que os valores incorretos estão errados

  • "A saída padrão do comando foo é anexada ao arquivo bar" está incorreta, pois anexar requer >> (duplo maior que), não >.
  • "O comando foo recebe sua entrada padrão do arquivo bar" está incorreta porque o redirecionamento de entrada padrão usa < (por exemplo, foo < bar), não >.
  • "O comando foo recebe sua entrada padrão da saída padrão do comando bar" está incorreta porque descreve um pipe (foo | bar), não redirecionamento de arquivos.
  • "O stderr do comando foo é salvo no arquivo bar" está incorreta porque stderr é o descritor de arquivo 2; para redirecionar o stderr, use 2> (por exemplo, foo 2> bar).