BASH打破了SIGINT的读取线
发布时间:2020-12-15 21:00:33 所属栏目:安全 来源:网络整理
导读:我尝试在套接字上的读取循环中捕获SIGINT ctrl c,但我要求的中断仅在新行之后得到处理.因此,当我按下我正在运行的应用程序时,我必须等待一个新行到达套接字才能在循环中断/应用程序退出之前 这是最小版本: trap "break" SIGINT SIGHUP SIGTERMexec 3/dev/tc
我尝试在套接字上的读取循环中捕获SIGINT ctrl c,但我要求的中断仅在新行之后得到处理.因此,当我按下我正在运行的应用程序时,我必须等待一个新行到达套接字才能在循环中断/应用程序退出之前
这是最小版本: trap "break" SIGINT SIGHUP SIGTERM exec 3<>/dev/tcp/192.168.1.84/50885 while read line do echo -e "$linen" done <&3 我怎样才能立即打破循环并退出应用程序? 解决方法
休息不是一个真正的命令,你可以在任何你想要的地方执行;它只是一个语法结构来标记一个离开周围循环的点.你的中断没有周围的循环,所以它没有意义(并且是一个错误:bash:break:仅在’for’,`while’或`until’循环中有意义).
您需要删除read命令: 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 "$linen" done <&3 & pid=$! echo $pid > /tmp/read.pid wait $pid 当然,这只是一个非常粗略的解决方案,不会隐藏由终止子壳等发出的任何错误消息.但它显示了这个想法并解决了你问的问题.为了隐藏预期的错误消息等,你可能想问其他问题(或者只是在这里搜索已经给出的答案;-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |