在bash中处理来自/ dev / tcp的响应

时间:2017-11-24 15:46:47

标签: bash tcp

我通过/ 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
}

2 个答案:

答案 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