2016-03-30 13 views
1

シンプルなインタラクティブコマンドラインインターフェイスを備えたLinuxアプリケーションが組み込まれています。stdinとstdoutをnetcatにリダイレクトする

私はtelnet(または一般的にはネットワーク)からコマンドラインにアクセスしたいと思います。

ただし、ボードがオンになったとき、および一意のインスタンスでプロセスを開始する必要があります。だから、次netcatコマンドはオプションではありません。

nc -l -p 4000 -e myapp 

私は

nc -l -p 4000 | myapp 

がmyappのにリモートコマンドを送信するために行うことができますが、この方法、私はmyapp出力を見ることはできません。

stdinとstdoutをnetcatにリダイレクトする方法はありますか?

ありがとうございました。

答えて

3

私はbashのvを使用していることを発見> = 4.0私はcoprocを使用することができます。

#!/bin/bash 

coproc myapp 
nc -kl -p 4000 <&"${COPROC[0]}" >&"${COPROC[1]}" 
+0

いいアイデア。 &$ {COPROC [0]} ">" $ {COPROC [1]} "の部分は、bashがあなたのために行うので不要です。 'stderr'を' stdout'にリダイレクトするには '2>&1'だけでなければなりません。 –

+0

@MaximEgorushkin私はちょうど '2>&1'で試しましたが、うまくいきません... –

5

netcatを

netcatより高度であるsocat、あるにはstdinとstdoutの両方をリダイレクトする方法はあります。 stdinstdoutの両方をリダイレクトできます。例えば:上記cat

socat TCP4-LISTEN:5556,reuseaddr,fork EXEC:"cat - /etc/redhat-release" 

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) 
+0

お勧めのコマンドを使用すると、自分のアプリケーションのみ起動されますクライアントが接続するとき(nc -eのように)。私は何の関係もなくプロセスを起動できるようにしたい。 –

+0

@DanielePallastrelliアプリケーションはTCPサーバーでなければなりません。実行中のプロセスのファイルディスクリプタを(少なくとも簡単に)リダイレクトすることはできません。 –

+0

まあ...アプリケーションを起動すると、すぐにstdin/outをsocatにリダイレクトできます.socatはサーバーとして動作します。後で接続が到着する可能性があります。 –

関連する問題