bash脚本运行时按ENTER键触发清屏的实现方法
在Bash脚本中捕获ENTER键触发清屏
完全可以实现。核心是修改终端的输入模式,让脚本能实时捕获按键,而非等待回车缓冲。以下是修改后的完整脚本:
#!/bin/bash # 保存终端原始配置,脚本退出时自动恢复,避免终端状态异常 trap 'stty "$original_stty"; exit' EXIT original_stty=$(stty -g) # 切换终端到非规范模式:关闭输入缓冲、关闭回显,让按键实时被读取 stty -echo -icanon time 0 min 0 # 后台启动按键监听循环 while true; do # 读取单个字符 read -n 1 key # 判断是否为ENTER键(ASCII 13,对应\r) if [[ "$key" == $'\r' ]]; then clear fi done & # 原有的输出逻辑 while true; do sleep 1 echo -n '.' done
关键部分说明:
- 终端状态保存与恢复:
stty -g导出当前终端设置,trap确保脚本退出时恢复,防止退出后终端无法正常输入。 - 非规范模式设置:
-icanon关闭规范输入模式,取消按键缓冲;time 0 min 0让read不会阻塞等待输入;-echo关闭输入回显,避免按ENTER时出现多余的换行符。 - 按键监听:后台循环用
read -n 1读取单个字符,捕获到ENTER键($'\r')时执行clear清屏。
使用说明:
- 将脚本保存为
dot_printer.sh,赋予执行权限:chmod +x dot_printer.sh - 运行脚本:
./dot_printer.sh - 按ENTER键即可清屏,脚本会继续输出点;按
Ctrl+C退出,终端自动恢复正常状态。
如果遇到ENTER键不触发的情况,可以尝试将判断条件改为[[ "$key" == $'\n' ]],部分终端环境下ENTER对应\n而非\r。
内容的提问来源于stack exchange,提问作者dkd6
相关产品推荐
相关产品推荐

