O que acontece sob o redirecionamento de erros?

0

Enquanto lia sobre linux, recebi o seguinte:

Because stderr is not the same as stdout, error messages will still be seen on the terminal windows in the above example.

If you want to redirect stderr to a separate file, you use stderr’s file descriptor number (2), the greater-than sign (>), followed by the name of the file you want to hold everything the running command writes to stderr:

$ do_something 2> error-file

A special shorthand notation can be used to put anything written to file descriptor 2 (stderr) in the same place as file descriptor 1 (stdout): 2>&1

$ do_something > all-output-file 2>&1

bash permits an easier syntax for the above:

$ do_something >& all-output-file

Aqui do_something é algum comando. Eu realmente não estou entendendo o que está acontecendo embaixo em todos os 3 comandos mencionados acima. Eu sei que & é usado para tornar um processo um processo em segundo plano, mas não estou obtendo a lógica. Eu sou novo a este sabor por favor Alguém pode explicar isso?

    
por lazarus 03.09.2014 / 00:04

1 resposta

1

Sua confusão pode ser porque >& é totalmente diferente de & .

>& ou <& são usados no redirecionamento para apontar para um descritor de arquivo (fd). Os casos acima redirecionam para 1 e 2, que são stdout e stderr, respectivamente.

> significa "stdout de redirecionamento"

2> significa "redirecionamento fd 2 (stderr)"

>&2 significa "redirecionar stdout para fd 2 (stderr)". Observe como isso difere de >2 , o que significaria "redirecionar stdout para um arquivo chamado 2 " - é por isso que o & é importante. Isso indica que a próxima coisa será um fd, não um nome de arquivo.

Agora, claro, como você observou, se um & estiver sozinho sem um símbolo de redirecionamento, significa algo completamente diferente - "retorne imediatamente, execute o comando anterior em segundo plano".

    
por Michael Terry 13.04.2015 / 22:38