在bash中的while循环中读取完整的消息

时间:2017-12-04 15:29:42

标签: xml bash tcp while-loop

我通过/ dev / tcp连接到服务器以接收传入的xml消息。下面的脚本运行良好,但如果xml消息中有空白字符,则消息突然出现。但我需要阅读完整的信息。我可以通过在while循环中集成关闭的xml-tag来解决这个问题吗?

#!/bin/bash
exec 3<>/dev/tcp/192.168.24.23/1234

processResponse() {
  RESPONSE=$1 
  if [[${RESPONSE:0:10} == "<firsttag>" ]]; then
    curl -X POST --data "postdata=$RESPONSE" http://localhost/index.php
  fi 
}

while read response
    do processResponse $response
done <&3

xml-message将如下:

<firsttag>
   <secondtag>message with blanks inside</secondtag>
</firsttag>

1 个答案:

答案 0 :(得分:0)

正如chepner所说,您的方法并不十分适合,但是如果您必须放弃XML解析器,则可以针对所示情况解决此问题。与其编写while循环脚本,不如使用awk读取和组合消息行。

awk '/<firsttag>/   { RESPONSE = "" }
     /<firsttag>/,/<\/firsttag>/    { RESPONSE = RESPONSE$0 }
     /<\/firsttag>/ { system("curl -X POST --data \"postdata="RESPONSE"\" http://localhost/index.php") }
    ' <&3