Administração de Linux
medium
Administração de Linux Question #019e3987
Question Statement
Administração de Linux
#shell-redirection
#stdout
#stderr
#file-descriptor
#2>&1
Medium
Qual dos seguintes redirecionamentos do shell gravará a saída padrão e a saída de erro padrão em um arquivo chamado filename?
A
2>&1 >filename
B
filename 2>&1
Correct
C
1>&2>filename
D
filename
E
1&2>filename
Official Explanation / Community Explanations
O redirecionamento correto do shell para escrever tanto a saída padrão (stdout) quanto o erro padrão (stderr) em um arquivo chamado filename é >filename 2>&1. Isso funciona redirecionando primeiro stdout para o arquivo e, em seguida, redirecionando stderr (descritor de arquivo 2) para onde stdout (descritor de arquivo 1) estiver apontando no momento, que é o arquivo.
Como funciona
>filenameredireciona o descritor de arquivo 1 (stdout) para o arquivofilename.2>&1redireciona o descritor de arquivo 2 (stderr) para o destino atual do descritor de arquivo 1, que agora é o arquivo.- A ordem é crucial: stdout deve ser redirecionado para o arquivo antes que stderr seja redirecionado para stdout.
Por que o valor correto está certo
>filename 2>&1combina corretamente os dois fluxos no arquivo porque os redirecionamentos são avaliados da esquerda para a direita. Primeiro, stdout é enviado para o arquivo; em seguida, stderr é enviado para o mesmo local que stdout (o arquivo).
Por que os valores incorretos estão errados
2>&1 >filenameredireciona stderr para o stdout atual (que é o terminal por padrão) e, em seguida, redireciona stdout para o arquivo. Como resultado, apenas stdout vai para o arquivo; stderr ainda vai para o terminal.1>&2>filenameé sintaticamente inválido. A sintaxe correta para duplicar um descritor de arquivo én>&m, nãon>&m>filename. Isso seria interpretado como redirecionar stdout para stderr, seguido de uma tentativa de redirecionar algo para um arquivo, mas a sintaxe está incorreta.>>filenameanexa stdout ao arquivo, mas não redireciona stderr; stderr permanece no terminal.1&2>filenameé sintaticamente inválido. O caractere '&' deve ser colocado antes do número do descritor de arquivo em um redirecionamento duplicado (por exemplo,2>&1), não depois. Isso seria interpretado como redirecionar o descritor de arquivo 1 para um arquivo chamado2>filename? Na verdade,1&2>filenameé ambíguo e não é uma sintaxe válida do shell.