Você pode usar o seguinte truque para trocar stdout
e stderr
. Então você apenas usa a funcionalidade de canal regular.
( proc1 3>&1 1>&2- 2>&3- ) | proc2
Fornecido stdout
e stderr
ambos apontaram para o mesmo lugar no início, isso vai lhe dar o que você precisa.
O que o x>y
bit faz é alterar o identificador de arquivo, x
para que ele agora envie suas informações para onde o identificador de arquivo y
aponta atualmente. Para o nosso caso específico:
3>&1
cria um novo identificador 3
que será exibido no identificador atual1
(stdout original), apenas para salvá-lo em algum lugar para o marcador final abaixo.
1>&2
modifica o identificador 1
(stdout) para enviar para o identificador atual2
(stderr original).
2>&3-
modifica o identificador 2
(stderr) para enviar para o identificador atual3
(stdout original) e depois fecha o identificador 3
(via -
no final).
É efetivamente o comando swap que você vê nos algoritmos de classificação:
temp = value1;
value1 = value2;
value2 = temp;
rc
, que é outro shell. Por exemplo:proc1 |[2] proc2
. Não é legal? Não nobash
entanto.