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 stdouty stderrambos señalaron la misma posición en la salida, esto le dará lo que necesita.
Lo que hace el x>ybit es cambiar el identificador de archivo xpara que ahora envíe su información a donde yapunta actualmente el identificador de archivo . Para nuestro caso específico:
3>&1crea un nuevo identificador 3que saldrá al identificador actual1 (stdout original), solo para guardarlo en algún lugar para el último punto de viñeta a continuación.
1>&2modifica 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?bashAunque no en .