linux – `less`命令显示输出所用的时间

linux – `less`命令显示输出所用的时间,第1张

概述我有一个产生大量输出的脚本.脚本在T点暂停几秒钟. 现在我使用less命令来分析脚本的输出. 所以我执行./script |减.我让它运行足够的时间,以便脚本完成执行. 现在我按下Pg Down键来输出less命令的输出.令人惊讶的是,当在输出的点T处滚动时,我再次注意到暂停几秒钟. 该脚本不期望任何输入,并且在我开始分析less的输出时肯定会完成. 有人可以解释当脚本执行完毕后,输出中的几秒钟暂 我有一个产生大量输出的脚本.脚本在T点暂停几秒钟.

现在我使用less命令来分析脚本的输出.
所以我执行./script |减.我让它运行足够的时间,以便脚本完成执行.

现在我按下Pg Down键来输出less命令的输出.令人惊讶的是,当在输出的点T处滚动时,我再次注意到暂停几秒钟.

该脚本不期望任何输入,并且在我开始分析less的输出时肯定会完成.

有人可以解释当脚本执行完毕后,输出中的几秒钟暂停是如何显着的?

解决方法 您的脚本通过管道与较少的通信. Pipe是一个连接两个端点的内存字节流:你的脚本和less程序,前者写入输出,后者从中读取.

由于管道在内存中,如果它们随意变大,就不会令人愉快.因此,默认情况下,在任何给定时刻,管道内部(写入但尚未读取)的数据都有限制.默认情况下,它在Linux上为64k.如果管道已满,并且您的脚本尝试向其写入,则写入块.所以你的脚本实际上并没有工作,它在执行write()调用时会在某个时刻停止.

怎么克服这个?调整默认值是一个糟糕的选择;使用的是在读取器中分配一个缓冲区,以便它读入缓冲区,释放管道,从而让编写程序工作,但只显示(或处理)输出的一部分. less有这样的缓冲区,并且默认情况下会自动扩展它,但是它不会在后台填充它,它只会在你读取输入时填充它.

那么解决问题的方法是直到最后读取文件(就像你通常按G一样),然后回到开头(就像你通常按g一样).问题是您可以通过命令行指定这些命令,如下所示:

./script | less +Gg

但是,您应该注意,您必须等到整个脚本的输出加载到内存中,因此您将无法立即查看它.为此,不够复杂.但如果这是你真正需要的(在./script仍在计算结束时浏览输出的开头),你可能想要使用一个临时文件:

./script >x & less x ; rm x
总结

以上是内存溢出为你收集整理的linux – `less`命令显示输出所用的时间全部内容,希望文章能够帮你解决linux – `less`命令显示输出所用的时间所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/1032189.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存