Bash 继续从tcp服务器读取,直到收到特定消息
我有以下代码:Bash 继续从tcp服务器读取,直到收到特定消息,bash,shell,tcp,netcat,Bash,Shell,Tcp,Netcat,我有以下代码: 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
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";
以下是记录的内容:
我不明白为什么它不继续从netcat连接读取,似乎在收到第一条消息后停止读取。有人知道如何通过连接保持阅读吗
我猜管道关闭是因为echo语句存在?如果是这样,如何保持它打开?这是可行的,但我正在寻找一种更简单的方法,如果可能的话:
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;
有没有办法回显某些内容,但不关闭进程?文件描述符重定向到rescue
# 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";
我问了这个问题-是的,我做了一些研究,你所需要做的就是保持第一个过程是开放的。echo将在写入标准输出后死亡。如果您创建了一个在写入stdout后仍然有效的进程,那么这就是您所需要的。
# 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