O que acontece no redirecionamento de erros?

O que acontece no redirecionamento de erros?

Ao ler sobre Linux, recebi o seguinte:

Como stderr não é igual a stdout, mensagens de erro ainda serão vistas nas janelas do terminal no exemplo acima.

Se você deseja redirecionar o stderr para um arquivo separado, use o número do descritor de arquivo do stderr (2), o sinal de maior que (>), seguido pelo nome do arquivo que deseja armazenar tudo o que o comando em execução grava no stderr:

$ do_something 2> error-file

Uma notação abreviada especial pode ser usada para colocar qualquer coisa escrita no descritor de arquivo 2 (stderr) no mesmo lugar que o descritor de arquivo 1 (stdout): 2>&1

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

bash permite uma sintaxe mais fácil para o acima:

$ do_something >& all-output-file

Aqui do_somethingestá algum comando. Eu realmente não estou entendendo o que está acontecendo em todos os três comandos mencionados acima. Eu sei &que é usado para transformar um processo em segundo plano, mas não estou entendendo a lógica. Sou novo neste sabor, por favor. Alguém pode explicar isso?

Responder1

Sua confusão pode ser porque >&é algo 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 "redirecionar stdout"

2>significa "redirecionar fd 2 (stderr)"

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

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

informação relacionada