Administração de Linux Question #019e3987
Qual das seguintes afirmações está correta em relação ao comando foo 1> bar?
A saída padrão do comando foo é anexada ao arquivo bar.
A saída padrão do comando foo sobrescreve o arquivo bar.
O comando foo recebe sua entrada padrão (stdin) do arquivo bar.
O comando foo recebe sua entrada padrão (stdin) da saída padrão (stdout) do comando bar.
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).