Puedes usar el siguiente truco para intercambiar stdout
y stderr
. Entonces solo usa la funcionalidad de tubería normal.
( proc1 3>&1 1>&2- 2>&3- ) | proc2
Siempre stdout
y stderr
ambos señalaron la misma posición en la salida, esto le dará lo que necesita.
Lo que hace el x>y
bit es cambiar el identificador de archivo x
para que ahora envíe su información a donde y
apunta actualmente el identificador de archivo . Para nuestro caso específico:
3>&1
crea un nuevo identificador 3
que saldrá al identificador actual1
(stdout original), solo para guardarlo en algún lugar para el último punto de viñeta a continuación.
1>&2
modifica el manejador 1
(stdout) para enviarlo al manejador actual2
(stderr original).
2>&3-
modifica el manejador 2
(stderr) para que salga al manejador actual3
(stdout original) y luego cierra el manejador 3
(a través de -
al final).
Es efectivamente el comando de intercambio que ves en los algoritmos de clasificación:
temp = value1;
value1 = value2;
value2 = temp;
rc
, que es otro shell. Por ejemplo:proc1 |[2] proc2
. ¿No es lindo?bash
Aunque no en .