使用 GNU less 的 bash 循环,每 2 分钟刷新一次

Posted

技术标签:

【中文标题】使用 GNU less 的 bash 循环,每 2 分钟刷新一次【英文标题】:bash loop with GNU less that refreshes every 2 minutes 【发布时间】:2016-05-15 15:39:55 【问题描述】:

我有一台带有数据文件夹和脚本的 linux 机器,该脚本在运行它的文件夹的不断变化的内容上生成报告 xlsx 电子表格文件。我使用 xlsx2tsv 脚本将其转换为 tsv 文本,耗时不到一秒。该脚本需要大约 1 分钟来生成电子表格文件,我希望有一个终端屏幕在 GNU 较少的缓冲区中显示表格的结果,我可以在其中使用光标移动,并使用 /search 等搜索内容. 最新版本的内容。

目前我有一个 bash while true; do 循环,它首先计算脚本的内容,然后将其转换为 tsv 并将其通过管道传输到 GNU less。然后在另一个终端屏幕中,我有一个 while true; do 循环,每 2 分钟就会终止一次 less 命令。但这让我有 1 分钟不活动,我正在等待电子表格更新,然后才能使用 less 导航内容。

我想优化这个设置,以便在后台生成一个新的电子表格,而不是在我杀死 less 命令时,而是在 1 分钟前开始,这样更新的less 命令总是给我一个工作副本,我可以导航。理想情况下,无需为其创建第三个终端窗口。

有什么想法吗?也许 GNU 并行?

当前设置:

# screen in the data folder with less command
while true; do $HOME/script -dir $PWD && xlsx2tsv $(ls $PWD/*.xlsx) 1 | column -t | less -S -N; sleep 0.5; done
# screen 2 with the less killing
while true; do pkill less; sleep 120; done

【问题讨论】:

不能少排队文件吗? 也许将电子表格转换放入与pkill less 相同的循环中,并将输出放入磁盘上的文件中。然后在第一个循环中,等待文件存在并用less打开它。 【参考方案1】:
while true; do
  (sleep 0.5
   $HOME/script -dir $PWD &&
   xlsx2tsv $(ls $PWD/*.xlsx) 1 |
   column -t > new;
   mv new old;
   killall less
  ) &
  less -S -N old
done

【讨论】:

【参考方案2】:

我的 less 手册页中提到了“R”命令

R 重新绘制屏幕,​​丢弃任何缓冲的输入。如果文件正在更改时很有用 正在查看。

所以,只需点击 R 即可刷新。

【讨论】:

我假设文件名相同。

以上是关于使用 GNU less 的 bash 循环,每 2 分钟刷新一次的主要内容,如果未能解决你的问题,请参考以下文章

如何每 20 秒执行一次 bash 脚本? ,好用睡眠和循环?

CentOS 7.0升级GNU Bash

Linux里面bash是啥?

脚本 1

linux里面bash是啥?

bash