将进程stdin和stdout重定向到netcat

Dan*_*lli 2 linux netcat socat

我有一个带有简单交互式命令行界面的嵌入式Linux应用程序.

我想从telnet(或网络,一般)访问命令行.

但是,应该在电路板打开时以及在一个唯一的实例中启动该过程.因此,以下netcat命令不是一个选项:

nc -l -p 4000 -e myapp
Run Code Online (Sandbox Code Playgroud)

我可以

nc -l -p 4000 | myapp
Run Code Online (Sandbox Code Playgroud)

向myapp发送远程命令,但这样我看不到myapp输出.

有没有什么办法来重定向 stdin和stdout来netcat

谢谢.

Dan*_*lli 7

我发现通过使用bash v.> = 4.0我可以使用coproc:

#!/bin/bash

coproc myapp
nc -kl -p 4000 <&"${COPROC[0]}" >&"${COPROC[1]}"
Run Code Online (Sandbox Code Playgroud)


Max*_*kin 5

有没有办法将stdin和stdout重定向到netcat

socat,这是一个更先进的netcat.您可以重定向两者stdinstdout使用它.例如:

socat TCP4-LISTEN:5556,reuseaddr,fork EXEC:"cat - /etc/redhat-release"
Run Code Online (Sandbox Code Playgroud)

另外,在上述cat读出stdin/etc/redhat-release并把它们输出到stdout.

然后尝试使用:

$ echo "hello" | nc 127.0.0.1 5556
hello
Fedora release 22 (Twenty Two)

$ echo "hello 2" | nc 127.0.0.1 5556
hello 2
Fedora release 22 (Twenty Two)
Run Code Online (Sandbox Code Playgroud)