我试图在套接字上读取读取循环内的sigint ctrl + c,但断裂我要求在新行之后被加工。所以当我的运行应用程序时,我必须等待新的线路在循环中断/ app退出之前到达套接字

这是最小的版本:

trap "break" SIGINT SIGHUP SIGTERM
exec 3<>/dev/tcp/192.168.1.84/50885

while read line  
do   
   echo -e "$line\n" 
done <&3
.

如何立即打破循环并退出应用程序?

有帮助吗?

解决方案

一个生成的icetagcode不是一个真正的命令,你可以在你想要的地方执行;它仅仅是一个句法构造,标记留下周围环路的点。您的break没有周围循环,因此它没有意义(并且是错误:break)。

您需要杀死bash: break: only meaningful in a `for', `while', or `until' loop命令:

trap "killRead" SIGINT SIGHUP SIGTERM

killRead() {
  kill $(cat /tmp/read.pid)
}

exec 3<>/dev/tcp/192.168.1.84/50885

while read line  
do   
   echo -e "$line\n" 
done <&3 & pid=$!

echo $pid > /tmp/read.pid

wait $pid
.

当然,这只是一个非常原油的解决方案,而不是隐藏终止子屏幕等的任何错误消息,但它显示了这个想法并解决了您所询问的问题。用于隐藏预期的错误消息等您可能希望询问其他问题(或只是在此处搜索已经给出的答案; - )

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top