O que está acontecendo nesses redirecionamentos MULTIOS?
772
Quando corro 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” não são vermelhos no primeiro?
Com a MULTIOSopção de shell definida, isso duplicaria a saída do echoerro padrão. Isso produz o descolorido hique grepnunca vê. O outro hipassa grepe é colorido.
O 2>&1redirecionamento não faz nada, pois não há saída para 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
onde a saída padrão nãoecho seria duplicada e o erro padrão do seria enviado , produzindo um único colorido .{ ...; }grephi
Seu segundo pipeline,
1>&2 echo hi | grep hi
ou,
echo hi 1>&2 | grep hi
(que é o mesmo que seu primeiro pipeline com o redirecionamento no-op 2>&1removido) também redireciona a saída padrão duas vezes; uma vez para o erro padrão (o sem cor hi) e para o tubo (o colorido hi).
Para duas cores hi:
echo hi 2>&1 1>&2 | grep hi
ou
echo hi 1>&1 | grep hi
(Isso é com um pouco de aceno de mão, pois não estou muito acostumado com o zshshell)
Seu primeiro pipeline:
Este é o mesmo que
pois
|&
é o mesmo que2>&1 |
.Com a
MULTIOS
opção de shell definida, isso duplicaria a saída doecho
erro padrão. Isso produz o descoloridohi
quegrep
nunca vê. O outrohi
passagrep
e é colorido.O
2>&1
redirecionamento não faz nada, pois não há saída para erro padrão deecho
. Seria diferente se você tivesse, por exemploou
onde a saída padrão não
echo
seria duplicada e o erro padrão do seria enviado , produzindo um único colorido .{ ...; }
grep
hi
Seu segundo pipeline,
ou,
(que é o mesmo que seu primeiro pipeline com o redirecionamento no-op
2>&1
removido) também redireciona a saída padrão duas vezes; uma vez para o erro padrão (o sem corhi
) e para o tubo (o coloridohi
).Para duas cores
hi
:ou
(Isso é com um pouco de aceno de mão, pois não estou muito acostumado com o
zsh
shell)