Todo el mundo sabe cómo hacer una tubería unidireccional entre dos programas (bind stdout
del primero y stdin
del segundo):first | second
.
Pero, ¿cómo hacer una tubería bidireccional, es decir, enlace cruzado stdin
y stdout
de dos programas? ¿Hay una manera fácil de hacerlo en un caparazón?
Respuesta aceptada:
Si las canalizaciones en su sistema son bidireccionales (como lo son en Solaris 11 y algunos BSD al menos, pero no en Linux):
cmd1 <&1 | cmd2 >&0
Sin embargo, tenga cuidado con los puntos muertos.
También tenga en cuenta que algunas versiones de ksh93 en algunos sistemas implementan canalizaciones (|
) usando un par de sockets . los pares de sockets son bidireccionales, pero ksh93 apaga explícitamente la dirección inversa, por lo que el comando anterior no funcionaría con esos ksh93 incluso en sistemas donde las tuberías (creadas por pipe(2)
llamada del sistema) son bidireccionales.