Unix程序如何判断输入流结束?如何实时向fzf传输文件内容?
fzf相关问题解答
一、fzf如何判断输入流尚未结束
fzf通过监听标准输入(stdin)的文件描述符状态来判断输入流是否结束:
- 当管道另一端的进程仍在运行时,stdin的文件描述符处于「可读但未触发EOF」的状态,fzf会持续读取输入内容并实时刷新显示,同时显示加载图标。
- 当管道另一端的进程退出时,会关闭对应的stdin文件描述符,fzf收到EOF信号后,就会停止加载状态,固定显示已接收的全部内容。
二、实现通过文件向fzf实时传输内容的方法
直接用fzf < file.txt只能读取命令执行时的文件静态内容,因为重定向操作是一次性读取文件当前数据,不会跟踪后续变化。要实现实时传输,需要借助能持续跟踪文件新增内容的工具,比如tail:
- 先后台运行写入文件的命令(保持原逻辑):
for i in `seq 1 5`; do echo $i; sleep 1 ; done > file.txt &
- 使用
tail -f跟踪文件新增内容并传给fzf:
tail -f file.txt | fzf
tail -f会持续监听文件的新增内容,每有新数据就输出到管道,fzf就能实时刷新显示这些内容。
如果需要处理文件被截断或重新创建的场景,可以改用tail -F(大写F),它会自动重新打开文件继续跟踪:
tail -F file.txt | fzf
内容的提问来源于stack exchange,提问作者Pythonist
相关产品推荐
相关产品推荐

