我经常通过管道命令来less
读取输出(例如编译器错误)。
MyCommand | less
这很棒,因为它使拖网大量输出变得容易,但是当我退出时,less
输出就消失了。如何使退出 less 后输出仍然可见?
这个问题不同于有没有办法重定向程序的输出并仍然将其发送到标准输出?因为这个问题涉及通过 输出到文本文件tee
,据我所知,它不提供在less
和之间分割输出的工具stdout
。
答案1
使用less -X
:
禁止将 termcap 初始化和取消初始化字符串发送到终端。
这将在分页之前和之后留下屏幕上的任何文本。所以:
command | less -X
就会达到你想要的效果。请注意,如果您向上滚动,此输出仍然会是错误的(重复行) - 如果不写入文件,这是不可避免的。
您还可以将环境变量设置LESS
为包含的值,X
以便在每次调用时默认执行此操作less
。
如果您想写入文件而不使用tee
,您可以使用less -o filename
或--log-file=filename
选项。
答案2
您可以使用:
command | tee filename.out | less
如果运行 less 命令后仍需要查看输出,则通过编辑器检查 filename.out。
另一个想法是更改您的术语设置以使用哑终端类型。你必须尝试一下这个。
答案3
如果问题只是 less 在退出时“清除屏幕”,您可以通过告诉 less 在启动和停止时不要发送终端/termcap init/de-init 字符串来避免这种行为。您可以通过使用来做到这一点-X
。所以尝试一下command | less -X
。
如果这些字符串执行实际必要的操作,则可能会产生其他副作用,但我不希望您遇到这种情况。
答案4
您还可以尝试使用该命令more
来代替less
.它仍然会对输出进行分页并允许您很好地滚动它,但最终您的终端将保留输出,就好像它没有通过任何管道传输一样。