【问题标题】:Keep reading from tcp server until a certain message is received继续从 tcp 服务器读取,直到收到特定消息
【发布时间】:2018-10-01 17:08:53
【问题描述】:

我有以下代码:

 echo "about to echo stuff 1";

 echo -e "foo\n" | nc localhost "${ql_server_port}" | while read response; do
         echo "response from server: $response";
         if [[ "$response" == "released" ]]; then
            echo "quicklock: Lock was released.";
            return 0;
         fi
   done;

 echo "about to echo stuff 2";

这是记录的内容:

about to echo stuff 1
response from server: received_data
about to echo stuff 2

我不明白为什么它不继续从 netcat 连接读取,似乎在收到第一条消息后停止读取。有人知道如何从连接中继续读取吗?

我的猜测是管道关闭是因为 echo 语句退出?如果是这样,如何保持打开状态?

【问题讨论】:

标签: bash shell tcp netcat


【解决方案1】:

文件描述符重定向到救援

# make a copy of stdout
exec  3<&1
echo "about to echo stuff 1";

# read from fd 3
{ nc localhost 1234 <3 | while read response; do
    echo "response from server: $response";
    if [[ "$response" == "released" ]]; then
        echo "quicklock: Lock was released."
        break
    fi
done } &

# echo to stdout but redirect to fd 3
echo -e "foo\n" >3
echo -e "bar\n" >3
# close descriptor when done
exec  3<&-
# wait for comm to finish
sleep 2
echo "about to echo stuff 2";

输出

about to echo stuff 1
response from server: bin
response from server: gar
response from server: released
quicklock: Lock was released.
about to echo stuff 2

【讨论】:

  • 是的,我做了一些研究,您需要做的就是保持第一个进程打开。 echo 将在写入标准输出后消失。如果您创建一个在写入标准输出后仍保持活动状态的进程,那么这就是您所需要的。
【解决方案2】:

这可行,但如果可能的话,我正在寻找一种更简单的方法:

     local named_pipe="$HOME/.quicklock/named_pipes/$$";
     mkfifo ${named_pipe};

      tail -f ${named_pipe} | nc localhost "${ql_server_port}" | while read response; do
         echo "response from server: $response";
         if [[ "$response" == "released" ]]; then
            echo "quicklock: Lock was released.";
            return 0;
         fi
      done &
   fi


     echo -e "{\"quicklock\":true}\n" > ${named_pipe}
     wait;

有没有办法回显某些内容,但不关闭进程?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2013-03-02
    相关资源
    最近更新 更多