I have an embedded linux application with a simple interactive command line interface.
I'd like to access the command line from telnet (or network, in general).
However, the process should be started when the board turns on, and in a unique instance. So, the following netcat
command is not an option:
nc -l -p 4000 -e myapp
I can do
nc -l -p 4000 | myapp
to send remote commands to myapp, but this way I can't see myapp
output.
Is there any way to redirect both stdin and stdout to netcat
?
Thanks.
Is there a way to redirect both stdin and stdout to netcat
There is socat
, which is a more advanced netcat
. You can redirect both stdin
and stdout
with it. E.g.:
socat TCP4-LISTEN:5556,reuseaddr,fork EXEC:"cat - /etc/redhat-release"
In the above cat
reads stdin
and /etc/redhat-release
and outputs them into stdout
.
And then try using that:
$ 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)
I found that by using bash v. >= 4.0 I can use coproc
:
#!/bin/bash
coproc myapp
nc -kl -p 4000 <&"${COPROC[0]}" >&"${COPROC[1]}"
EDIT
I eventually incorporated a telnet server in my cli library. You can find the result on GitHub: https://github.com/daniele77/cli
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With