Передача сообщения в интерактивную программу с использованием bash-скрипта - PullRequest
1 голос
/ 11 марта 2011

Я написал сетевую программу echoclient и echoserver, чтобы сообщения, написанные на стороне клиента, могли передаваться клиенту программой echoserver.Echoclient - это интерактивная программа, которая ждет от пользователя ввода сообщения.Затем он отправляет сообщение, получает ответ, а затем снова ждет нового сообщения от пользователя.Теперь я хотел бы написать сценарий оболочки, чтобы я мог отправлять новое сообщение на сервер каждые 100 микросекунд.Но я не знаю, как передавать сообщения в программу эхоклиента.Есть мысли по этому поводу?

#connect to the server ...
./echoclient SERVER_IP_ADDR SERVER_PORT

i=1
while [ 1 ]
do
   #send "message i" to the server. how to do it?
   usleep 100  
   let i++ 
done

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

РЕДАКТИРОВАТЬ: Первый ответ был далеко - неправильно прочитал вопрос. Механизм ниже должен работать.

mkfifo /tmp/echostuff
./echoclient SERVER_IP_ADDR SERVER_PORT < /tmp/echostuff &

exec 3>/tmp/echostuff
let i=1
while true
do
   echo "message $1" >&3
   sleep 0.0001
   let i+=1
done
1 голос
/ 13 марта 2011

Вместо fifo (который показал Эрик) должен работать и простой канал, например (код, украденный из ответа Эрика):

let i=1
while true
do
   echo "message $i"
   sleep 0.001
   let i+=1
done |
./echoclient SERVER_IP_ADDR SERVER_PORT

Таким образом, цикл выполняется в подоболочке, поэтому вы не можете получить доступ к новому значению $i после цикла (оно по-прежнему равно 1).

Другой способ - запустить эхо-клиент как сопроцесс bash и подключить его вход к выходу команды echo. (Если вы хотите увидеть результат, он будет еще сложнее.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...