bash – 如何将第二个进程的stdout重定向到第一个进程的标准?
我有两个进程,我需要这样连接:
proc1 – 将输出发送到proc2 到目前为止,所有的管道示例都是这样的: 这很好,但是如何使proc2的输出转到proc1? bash的例子会很好Windows外壳的例子会很棒:) 提前致谢, 添加更多详细信息: 系统预计将作为客户端 – 服务器系统,客户端 – 服务器系统中的客户端在请求 – 响应交互模型中与服务器协同工作。当客户端没有更多请求时,交互结束。 互动范例: 此时,服务器在客户端退出后退出。结束例子。 似乎像(假设管道可用)
看起来像一个bash协处理可能是你想要的。在bash手册中查找coproc保留字。
(编辑:添加简单的使用方案) 它的工作原理如下: # start first process as a coprocess to the current shell coproc proc1 # now ${COPROC[0]} contains the number of an open (input) file descriptor # connected to the output of proc1,and ${COPROC[1]} the number of an # open (output) file descriptor connected to the input of proc1. # start second process,connecting its input- and outputstreams # to the output- and inputstreams of the first process proc2 <&${COPROC[0]} >&${COPROC[1]} # wait on the first process to finish. wait $COPROC_PID 如果你可能有多个协处理器,请给你的进程一个这样的名字: coproc NAME { proc1 } 然后可以使用以前使用COPROC的NAME。 这是一个使用ping函数作为proc1和proc2的完整示例程序: #!/bin/bash # # Example program using a bash coprocess to run two processes # with their input/output streams # # # A function which reads lines of input and # writes them back to standard output with the # first char cut off,waiting 5s inbetween. # # It finishes whenever an empty line is read or written,# or at end-of-file. # # The parameter $1 is used in debugging output on stderr. # function ping () { while read do local sending echo "ping $1: received '$REPLY'" >&2 [[ -n $REPLY ]] || break sleep 5s sending=${REPLY:1} echo "ping $1: sending '$sending'" >&2 echo $sending [[ -n $sending ]] || break done echo "ping $1: end" >&2 } # # Start first ping process as a coprocess with name 'p1'. # coproc p1 { ping 1 } # send some initial data to p1. (Not needed if one of the processes # starts writing before first reading.) echo "Hello World" >&${p1[1]} sleep 2.5s # # Run second ping process,connecting its default input/output # to the default output/input of p1. # ping 2 <&${p1[0]} >&${p1[1]} # wait for the coprocess to finish too. wait $p1_PID 它使用两个调用shell函数而不是外部程序,但它也可以与这些程序一起使用。这是输出(在stderr上): ping 1: received 'Hello World' ping 1: sending 'ello World' ping 2: received 'ello World' ping 2: sending 'llo World' ping 1: received 'llo World' ping 1: sending 'lo World' ping 2: received 'lo World' ping 2: sending 'o World' ping 1: received 'o World' ping 1: sending ' World' ping 2: received 'World' ping 2: sending 'orld' ping 1: received 'orld' ping 1: sending 'rld' ping 2: received 'rld' ping 2: sending 'ld' ping 1: received 'ld' ping 1: sending 'd' ping 2: received 'd' ping 2: sending '' ping 2: end ping 1: received '' ping 1: end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |