如何像vi/vim一样打开虚拟tty运行无额外依赖的watch类监控脚本
无依赖类watch文件查看脚本实现方案
你需要的类似Vim打开文件的隔离显示效果,本质是终端标准支持的**备用屏幕缓冲区(Alternate Screen Buffer)**特性,无需安装任何额外软件,仅用系统默认自带的tput工具即可实现,全程无第三方依赖。
完整实现代码
#!/bin/bash # 参数校验 if [ $# -ne 1 ] || [ ! -f "$1" ]; then echo "使用方式: $0 <待查看的文件路径>" exit 1 fi TARGET="$1" # 退出清理逻辑:切回原终端缓冲区 cleanup() { tput rmcup exit 0 } # 捕获所有常见退出信号,保证切回原界面 trap cleanup SIGINT SIGTERM EXIT # 切换到备用缓冲区(类似Vim打开的隔离界面) tput smcup # 循环刷新逻辑 while true; do clear cat "$TARGET" sleep 2 done
核心特性说明
- 完全符合你要求的隔离显示效果:脚本运行时不会污染原终端的历史输出,退出后立即回到执行脚本前的终端状态
- 所有依赖都是系统默认自带的POSIX标准工具,无需额外安装任何包,兼容所有主流Linux/Unix发行版以及MacOS终端
- 支持Ctrl+C等任意退出方式,不会出现终端显示异常的问题
可选优化(类tail -f效果)
如果你希望和tail -f一样只展示文件末尾的新增内容,可以把循环中的cat "$TARGET"替换为以下内容,自动适配终端高度展示最后一屏内容:
tail -n "$(tput lines)" "$TARGET"
使用方法
- 把上述代码保存为
watch_file.sh - 给文件加执行权限:
chmod +x watch_file.sh - 运行脚本查看目标文件:
./watch_file.sh /path/to/your/file
内容的提问来源于stack exchange,提问作者Octavia Clarke
相关产品推荐
相关产品推荐

