我有一个带有简单交互式命令行界面的嵌入式Linux应用程序。
我想从telnet(或通常是网络)访问命令行。
但是,应该在电路板开启时以及在一个唯一的实例中启动该过程。因此,以下netcat
命令不是一个选项:
nc -l -p 4000 -e myapp
我能做到
nc -l -p 4000 | myapp
将远程命令发送到myapp,但这样我看不到myapp
输出。
有没有办法将两者 stdin和stdout重定向到netcat
?
感谢。
答案 0 :(得分:6)
我发现使用bash v。> = 4.0我可以使用coproc
:
#!/bin/bash
coproc myapp
nc -kl -p 4000 <&"${COPROC[0]}" >&"${COPROC[1]}"
答案 1 :(得分:5)
有没有办法将stdin和stdout重定向到netcat
有socat
,这是一个更高级的netcat
。您可以将stdin
和stdout
重定向到它。 E.g:
socat TCP4-LISTEN:5556,reuseaddr,fork EXEC:"cat - /etc/redhat-release"
在上面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)
答案 2 :(得分:2)
您可以使用ncat(来自nmap包:apt install nmap
),然后按照:
ncat -lnvp 443 -e myapp
在您的应用中的每个fflush(stdout);
printf("%s",str);