我有一个带有简单交互式命令行界面的嵌入式Linux应用程序。
我想从telnet(或一般来说,网络)访问命令行。
但是,该过程应该在板子打开时开始,并且是在唯一的情况下。因此,以下netcat
命令不是一个选项:
nc -l -p 4000 -e myapp
我可以做
nc -l -p 4000 | myapp
将远程命令发送到myapp,但是这种方式我看不到myapp
输出。
有什么方法可以将both stdin和stdout重定向到netcat
?
谢谢。
我发现使用bash v。> = 4.0可以使用coproc
:
#!/bin/bash
coproc myapp
nc -kl -p 4000 <&"${COPROC[0]}" >&"${COPROC[1]}"
编辑
我最终在我的cli库中合并了一个telnet服务器。您可以在GitHub上找到结果:https://github.com/daniele77/cli
是否可以将stdin和stdout都重定向到netcat
有socat
,它是更高级的socat
。您可以使用它来重定向netcat
和stdin
。例如:
stdout
在以上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)
(从nmap软件包:ncat)来进行此操作,也可以遵循以下步骤:
apt install nmap
在您的应用程序中,每个ncat -lnvp 443 -e myapp
之后不要忘记fflush(stdout);