如何根据行数使用`cat`或`less`?


12

查看文件内容时,我想自动将cat文件短,但less超过屏幕尺寸的文件短。我可以在中使用某些东西wc -l,但是有没有一种更好的方式可以考虑窗口大小/当前可用行数呢?


1
尽管许多工具都这样做,但是请注意,它破坏了可预期性。即,用户无法预先知道将会发生什么。我觉得这很烦人,而git log其中确实有这件事情。您永远不会事先知道会得到什么(必须打q吗?)。
bitmask 2012年

4
注意:通常,应避免使用cat来查看文件。通常,您只应使用cat将文件的内容发送到stdout,以便可以将其通过管道传输到另一个进程。避免cat用于查看的原因是它将原始字节发送到终端,这可能导致执行意外的终端命令(例如,某些用户碰巧在文件中包含正确的字节以禁用终端键盘时卡住了) 。通常,您应该使用诸如的寻呼机less或编辑器,它们会格式化特殊字符以进行显示,以便终端不会解释它们。
克里斯·佩奇

2
如果要使用cat直接在终端中查看文件内容,请至少使用cat来cat -v转义特殊字符。
克里斯·佩奇

@bitmask好点,这就是为什么我问是否可以分屏显示cat可能是更好的解决方案
Tobias Kienzler 2012年

@ChrisPage我的键盘没有被杀,但我想我设法搞砸的代码页一次...感谢您指出cat -v
托比亚斯Kienzler

Answers:


9

为您提供涉及wc基于-的检查的公式:

(($(wc -l<input_file)<=$(tput lines))) && echo 'will fit' || echo 'not enough'

有一个$LINESshell变量也可以使用:

(($(wc -l<input_file)<=LINES)) && echo 'will fit' || echo 'not enough'

但是$LINES仅在命令提示符下更新。要理解我的意思,请在运行此命令并调整终端窗口的大小sleep

( sleep 3; echo $LINES; tput lines )

谢谢,这样做的好处是,less例如,如果使用屏幕的2/3 ,则可以将其调整为已使用cat
Tobias Kienzler 2012年

20

可能是'less -F file_to_read'选项:如果窗口足以显示所有文件,则退出较少;如果不是,则在寻呼机上等待


听起来不错,但在那种情况下不会输出任何内容,两种情况下的退出代码都相同
Tobias Kienzler 2012年

我只是尝试'less -F / etc / passwd',它正确显示文件(带或不带寻呼机)。没错,两种情况下的返回码均为0。
2012年

11
该命令按要求工作,但有一个小故障:显示文件后清除屏幕。添加该-X选项将停止清除,因此将像显示短文件一样显示该文件cat。不幸的是,-X显示长的滚动文件后,也不会清除屏幕。
manatwork 2012年

1
@manatwork太好了,谢谢。不清除屏幕实际上是可以的,因为如果cat这样调用也不会(不会)发生
Tobias Kienzler 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.