Bash中断了sigint上的readline
题
我试图在套接字上读取读取循环内的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
.
当然,这只是一个非常原油的解决方案,而不是隐藏终止子屏幕等的任何错误消息,但它显示了这个想法并解决了您所询问的问题。用于隐藏预期的错误消息等您可能希望询问其他问题(或只是在此处搜索已经给出的答案; - )
不隶属于 StackOverflow