O que está acontecendo nesses redirecionamentos MULTIOS?

1

Quando executo 1>&2 echo hi |& grep hi , recebo um oi não colorido seguido por um oi vermelho em uma nova linha. Esta é a mesma saída que 1>&2 echo hi | grep hi . Por que os dois "oi" são vermelhos no primeiro?

    
por HappyFace 22.11.2018 / 21:50

1 resposta

1

Seu primeiro canal:

1>&2 echo hi |& grep hi

Isso é o mesmo que

echo hi 1>&2 2>&1 | grep hi

desde |& é o mesmo que 2>&1 | .

Com a opção MULTIOS shell definida, isso duplicaria a saída de echo para o erro padrão. Isso produz o hi não colorido que grep nunca vê. O outro hi passa por grep e é colorido.

O redirecionamento 2>&1 não faz nada, pois não há saída para o erro padrão de echo . Seria diferente se você tivesse, por exemplo,

{ echo hi 1>&2; } 2>&1 | grep hi

ou

{ echo hi 1>&2; } |& grep hi

em que a saída padrão de echo seria não duplicada e o erro padrão de { ...; } teria sido enviado para grep , produzindo uma única cor hi .

Seu segundo pipeline,

1>&2 echo hi | grep hi

ou

echo hi 1>&2 | grep hi

(que é o mesmo que o seu primeiro pipeline com o redirecionamento não-op 2>&1 removido) também redireciona a saída padrão duas vezes; uma vez para o erro padrão (o hi não colorido), e para o pipe (o hi colorido).

Para duas cores hi :

echo hi 2>&1 1>&2 | grep hi

ou

echo hi 1>&1 | grep hi

(Isto é com um pequeno handwaving já que eu não estou acostumado com o zsh shell)

    
por 23.11.2018 / 00:51