使用bash脚本将消息传递给交互式程序

使用bash脚本将消息传递给交互式程序,bash,shell,echo,Bash,Shell,Echo,我已经编写了echoclient和echoserver网络程序,以便echoserver程序可以将在客户端编写的消息回送到客户端。Echoclient是一个交互式程序,它等待用户输入消息。然后它发送消息,获取响应,然后再次等待来自用户的新消息。现在,我想编写一个脚本shell,以便每100微秒向服务器发送一条新消息。但我不知道如何将消息传递给echoclient程序。有什么想法吗 #connect to the server ... ./echoclient SERVER_IP_ADDR SER

我已经编写了echoclient和echoserver网络程序,以便echoserver程序可以将在客户端编写的消息回送到客户端。Echoclient是一个交互式程序,它等待用户输入消息。然后它发送消息,获取响应,然后再次等待来自用户的新消息。现在,我想编写一个脚本shell,以便每100微秒向服务器发送一条新消息。但我不知道如何将消息传递给echoclient程序。有什么想法吗

#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

编辑:第一个答案太离题了——误读了这个问题。下面的机制应该会起作用

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
mkfifo/tmp/echostuff
./echoclient-SERVER\u IP\u ADDR-SERVER\u-PORT/tmp/echostuff
设i=1
虽然是真的
做
回显“消息$1”>&3
睡眠0.0001
设i+=1
完成
一个简单的管道也应该可以工作,而不是像Erik展示的那样使用fifo(从Erik的anwser偷来的代码):

但是,通过这种方式,循环在子shell中运行,因此您无法在循环之后访问新值
$i
(仍然是1)


另一种方法是将echoclient作为bash协进程运行,并将其输入连接到echo命令的输出。(如果你也想看到结果,它会变得更复杂。)

你需要多精确的计时?你可能需要写得更快一些。如果不是C,至少是Python。计时并不重要。我只是想逐渐增加服务器上的压力,这样我就可以知道在我的网络(这是一个相当大的网络)中可以同时支持多少个活动客户端。谢谢唯一的问题是echo命令(第4行)在客户端打印消息,这不是我想要的。“while”输出通过管道传输到echoclient程序,但“echo”输出会打印在屏幕上。您尝试过吗?在我的尝试中,
done
之后的管道捕获循环中输出到stdout的所有内容,包括
echo
s。(当然,我没有你的
echoclient
,所以我用了
Grep5
,它只输出带有
5
的行)对不起,我搞错了。代码工作起来很有魅力。谢谢。@aminfar:该语法将打开一个新的文件描述符,用于写入
/tmp/echostuff
。然后,当我
echo>&3
时,我写入文件
let i=1
while true
do
   echo "message $i"
   sleep 0.001
   let i+=1
done |
./echoclient SERVER_IP_ADDR SERVER_PORT