在静默模式下读取后,在bash脚本中捕获ctrl c
发布时间:2020-12-15 22:57:37 所属栏目:安全 来源:网络整理
导读:我正在处理的脚本以静默模式读取单个字符并将其存储到$c 下面是一个测试器脚本,它做了一个例子: #!/bin/bash gracefulExit() { echo "exiting..." #other stuff would go here exit 1 } trap gracefulExit INT while [ 1 = 1 ] do read -s -r -n1 c echo "c
我正在处理的脚本以静默模式读取单个字符并将其存储到$c
下面是一个测试器脚本,它做了一个例子: #!/bin/bash gracefulExit() { echo "exiting..." #other stuff would go here exit 1 } trap gracefulExit INT while [ 1 = 1 ] do read -s -r -n1 c echo "character read" done 我遇到的问题是,如果你使用ctrl c打破脚本,shell将保持静默模式(我看不到任何我输入的内容),直到我退出它才会恢复正常.我注意到这只发生在我捕获ctrl c之后(没有陷阱,它从静音模式中踢出).我的脚本要求我陷阱所以我可以清理. 这是4.2.10 有任何想法吗? 非常感谢您的帮助! 解决方法
尝试重新启用exit函数中的tty echo:
#!/bin/bash gracefulExit() { echo "exiting..." # reenable tty echo stty icanon echo echok exit 1 } trap gracefulExit INT while [ 1 = 1 ] do read -s -r -n1 c echo "character read" done 在我对OS X的测试中,读取禁用了这些设置:icanon echo echok. 在调用脚本之前运行它,然后在脚本完成后再次运行它并检查输出中的差异以确定您编程的更改.然后重新设置更改的标志. $diff before.out after.out 2,3c2,3 < lflags: icanon isig iexten echo echoe echok echoke -echonl echoctl < -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo --- > lflags: -icanon isig iexten -echo echoe -echok echoke -echonl echoctl > -echoprt -altwerase -noflsh -tostop -flusho -pendin -nokerninfo 在这里你可以看到改变的标志:icanon,echo,echok被禁用.您可以在开头标识“ – ”. 最后这是你的脚本的另一个版本,可以自动完成全部工作: #!/bin/bash # save the current tty flags tty_flags=`stty -g` gracefulExit() { echo "exiting..." # set the saved tty flags stty $tty_flags exit 1 } trap gracefulExit INT while [ 1 = 1 ] do read -s -r -n1 c echo "character read" done (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |