我通过/ dev / tcp连接到服务器以接收传入消息。要保持连接打开,我必须每10秒发送一次请求。这适用于下面的脚本。我的问题是:如何在脚本中的函数中处理传入的消息?
#!/bin/bash
exec 3<>/dev/tcp/192.168.24.23/1234
while true
do
cat <&3 &
while true
do
echo -en "hold-connection-request" >&3
sleep 10
done
done
而不是cat我想在processResponse()这样的函数中处理响应字符串。消息是包含多行的字符串。
processResponse() {
RESPONSE=$1
# do something with this string
}
答案 0 :(得分:0)
在后台运行看门狗循环,而不是处理器。
exec 3<>/dev/tcp/192.168.24.23/1234
while true; do
printf 'hold-connection-request' >&3
sleep 10; wait # Make it interruptible
done &
watchdog=$!
while true; do
# process requests
done <&3
kill "$watchdog" # If you need to
答案 1 :(得分:0)
主要只是重复上面的chepner,但是使用read来抓取并传递字符串。在这里测试的机会有限,如果不起作用,请告诉我。
#!/bin/bash
exec 3<>/dev/tcp/192.168.24.23/1234
processResponse() {
RESPONSE=$1 # blanks around = removed
# do something with this string
}
while sleep 10
do echo -en "hold-connection-request"
done >&3 &
anchor=$!
while read response
do processResponse $response
done <&3
ps -p $anchor >/dev/null && kill $anchor || echo No process $anchor to kill