#!/bin/bash cleanup() { stty echo exit 0 } trap cleanup SIGINT SIGHUP SIGTERM stty -echo while read -r line; do echo "$line" done < /foo/bar cleanup
当我按下Ctrl-C时,我的终端被搞砸了,因为stty -echo设置仍然有效.我有许多其他脚本,我的清理功能完美无缺.我遇到问题的唯一一次是在脚本处于读取循环时按Ctrl-C.当脚本在读取循环中时,有没有办法确保在按下Ctrl-C时调用清理函数?或者我只是错过了一些明显的东西?
更新:我的脚本中还有其他内容.我运行上面的确切脚本,我不能让它像我的其他脚本那样失败.我将不得不尝试将破碎的脚本提炼为我可以失败的东西,此时我将更新问题.
更新2:好的,我明白了.我从stty得到了一个错误(我没有看到,因为我的真正的清理功能也在清除屏幕).错误是:stty:标准输入:设备不适当的ioctl.我看了一下这显然是因为当stdin从文件/ foo / bar重定向时调用了stty.所以我改变了我的陷阱调用陷阱“中断”SIGINT SIGHUP SIGTERM并且它起作用了.