如何实现管道至FZF的轮询内容实时更新而非堆叠?
实现FZF实时更新轮询内容(仅显示最新版本)
问题现状
当前使用以下轮询脚本时,FZF会堆叠显示所有轮询返回的内容,导致输出重复冗余:
while true; do curl google.com -s; sleep 2; done | fzf
解决方案
要实现仅显示最新一份轮询结果并在内容变化时更新,可通过以下两种方式实现:
方法1:使用命名管道配合FZF的--listen选项
该方法通过命名管道将每次轮询的最新内容传递给FZF,触发FZF实时更新显示:
# 创建命名管道 mkfifo fzf_update_fifo # 后台启动轮询任务,将每次结果写入管道 while true; do curl google.com -s > fzf_update_fifo sleep 2 done & # 启动FZF监听管道,接收最新内容更新显示 fzf --listen fzf_update_fifo # 清理命名管道 rm fzf_update_fifo
方法2:通过ANSI控制码清除旧内容后输出新内容
利用终端清屏的ANSI控制序列,在每次轮询输出前清除之前的内容,确保FZF只接收最新的单份结果:
while true; do # 发送清屏+光标回到左上角的ANSI控制码 printf '\033[H\033[J' # 输出最新轮询内容 curl google.com -s sleep 2 done | fzf --phony
--phony参数用于让FZF禁用搜索功能,仅作为内容显示容器,若需要保留搜索功能可去掉该参数。
说明
两种方法都能实现仅显示最新轮询结果的需求:
- 方法1更优雅,通过FZF原生的监听机制实现更新,适合需要保留FZF全部交互功能的场景;
- 方法2依赖终端ANSI控制码,实现简单快速,适合轻量需求场景。
内容的提问来源于stack exchange,提问作者PeterM
相关产品推荐
相关产品推荐

