首页 > 解决方案 > 如何写入支持tail -f的文件

问题描述

是否可以在一个 bash 进程中写入文件并在另一个进程中使用 tail 读取它(与使用tail -f.

我想打开并不断写一些东西到文件

vi /tmp/myfile

并在其他终端打印写入该文件的内容

tail -f /tmp/myfile

我已经尝试过了,但是在 vi 中保存更改后,tail 不打印任何内容(只有初始行,在保存之前)。

动机:

在我的玩具项目中。我想使用pipeto.me服务构建共享剪贴板。我会在哪里连续写入文件,tail 捕获的所有更改都将通过管道传送到 curl。类似于 pipeto.me 的观看日志示例

tail -f logfile | curl -T- -s https://pipeto.me/2xrGcZtQ.

但它会监视我的文件,而不是日志文件,我会在 vi 中写入

但是除了解决我的问题之外,如果 vi 和 tail 可以实现这样的事情,我正在寻找一般的答案。

标签: bash

解决方案


您可以使用 cat 命令,通过将其输出流更改为 /tmp/file,即您键入的任何内容都将添加到 myfile,

cat > /tmp/myfile;
#input-> add text(standard input by default is set as keyboard)
#typing...

并使用 -F 作为参数的 tail 命令打印文件,

tail -F /tmp/file; #-F -> output appended data as the file grows and with retry
#output-> input given to file
#typing....

使用 vim 将文本写入文件,

vi /tmp/file;
#typing...
#:w -> write text to file
tail -F /tmp/file;
#
#typing...

当您使用 vim 写入文件时,它不会在您键入时立即写入(保存)它,而是当您退出插入模式并显式保存文件(:w)时,tail 的输出将被更新.

因此,您可以使用像 Autosaveplugin 这样的插件,它可以帮助自动保存,同步显示日志。


推荐阅读