2012-02-21 17 views
1

私はシェルスクリプトには新しく、私はパイプでグリップしようとしています。私は完全に間違った方向に向かっている可能性があります...名前付きパイプを使って 'ループ'を作成する

私は持っているこのループ内の単純な真のループが含まれているシェルスクリプトは、私は指定されたポートで聞いてnetcatを取得しているstdinを通してコマンドを待っているバイナリファイル。これはScript-Aです

私は引数として入力を受け入れる2番目のシェルスクリプトを持っています。そして、それらの引数をne​​tcatがリッスンしているポートにエコーします。これは

私の目的は、それが標準出力を経由して返すことができるようにNetcatを経由してスクリプト-Bにスクリプト-Aにあるバイナリファイルから戻る出力を得ることですスクリプト-Bです。バイナリファイルは、初期化され、入力を待つ必要があります。

これは私が持っているものです。

この設定で

スクリプト-

while true; do 
    nc -kl 1234 | /binarylocation/ --readargumentsfromstdinflag 
done 

スクリプト-B

foo=$(echo "$*" | nc localhost 1234) 
echo "$foo" 

、バイナリファイルの出力は、スクリプト-Aを介して行われます 私はこの時点になったいくつかの研究を行った後、私は戻ってnetcatをバイナリファイルからループのようなものを作成するために、名前付きパイプを使用しようとしています、それはまだ働いていない -

スクリプト-

mkfifo foobar 

while true; do 
    nc -kl 1234 < foobar | /binarylocation/ --readargumentsfromstdinflag > foobar 
done 

スクリプト-Bは、変更されていません。

約1日のうちにシェルスクリプトの使用経験がありますので、ありがとうございます。

+0

は私の答えを更新します... – Kaii

答えて

1

問題は、あなたのスクリプトBで..ですnetcatをはSTDINから読み込み、STDINを閉じたときにすぐに終了し、応答を待っていません。

あなたがこれを行うときに実現します:

foo=$((echo -e "$*"; sleep 2) | nc localhost 1234) 
echo "$foo" 

ncだからあなたが行う必要があります。..

-q after EOF on stdin, wait the specified number of seconds and 
     then quit. If seconds is negative, wait forever.` 

を標準入力の動作のためのパラメータがあります。

foo=$(echo -e "$*" | nc -q5 localhost 1234) 
echo "$foo" 
+0

回答ありがとうございました。私は数日間テストに戻っていません。私はこの質問を忘れていない - 心配しないで! –

+0

@AnthonyStansbridge so ...あなたの問題を解決しましたか? – Kaii

+0

は完璧に働いた:-)あなたの忍耐と永続性に感謝します! –

関連する問題