Por que o seguinte redirecionamento de saída resulta na impressão de duas linhas?
As >&2
cópias stdout para stderr e >/dev/stderr
também redirecionam stdout para stderr.
Espero apenas uma única linha de saída, pois echo foo
a saída é redirecionada para stderr.
Por que não vejo duas linhas de saída para: echo foo >/dev/stderr 2>&1
e echo foo >/dev/stdout 2>&1
?
➜ app git:(python3.10-pipeline) ✗ echo foo >/dev/stderr >&2
foo
foo
➜ app git:(python3.10-pipeline) ✗ echo foo >/dev/stdout >&2
foo
foo
No
bash
shell, redirecionar o mesmo fluxo duas vezes resultará no redirecionamento do conteúdo do fluxo para o último destino (mais à direita). É verdade que, se você desse aobash
shell os comandos que mostra, apenas uma única linha de saída seria gerada por cada um (no fluxo de erro padrão).No entanto, você usa o
zsh
shell, não obash
. Nozsh
shell, por padrão, o shell tratará vários redirecionamentos do mesmo fluxo como uma solicitação para duplicar esse fluxo, como setee
tivesse sido usado.Isso significa que
ou
que redireciona a saída padrão duas e três vezes, respectivamente, duplicará o fluxo de saída padrão da mesma maneira que
ou
faria.
Você pode desativar esse comportamento desativando a
MULTIOS
opção shell no shell (unsetopt MULTIOS
).