新的“更多”命令在每个文件之前换页:如何抑制?

新的“更多”命令在每个文件之前换页:如何抑制?

35 年来,我一直在观察该more命令的工作原理:当指定多个文件且没有任何选项时,它会显示标题和文件内容,如下所示(对于短文件最容易看到):

$ more file*
::::::::::::::
file1
::::::::::::::
one
/* you press the space bar to advance from this point */
::::::::::::::
file2
::::::::::::::
two
/* you don't press it here because it's already reached EOF */
$

以上是Ubuntu 22.04 上的more版本。在 Ubuntu 22.10 上的新功能中,它在每个文件头之前(显然是在每个 之前)打印终端“换页”,并将所有先前的输出从屏幕上驱动出来:对我来说,这违背了文本文件浏览器的目的。util-linux2.37.2util-linux 2.38::::::::::::::

此外,在more2.38 版本中,现在显然必须:n像在vi.作为一个vi用户,这对我来说有点自然,但也令人不安,因为过去可以单独使用空格键来连续浏览所有文件。

more --help一如既往地显示了一些控制分页的选项,但据我所知(至少在 Ubuntu 上编译),已经引入了换页功能,但没有任何选项来抑制它。

即使可以回溯util-linux版本2.37.2,我也不认为这是可持续的,因为它还会停止 100 多个其他 Unix 命令的开发,这些命令几十年来一直是标准词汇的一部分。自 20 世纪 80 年代以来,改变运作方式的影响more太过深远,以至于必须予以考虑:即恢复原始行为的某些方法。

答案1

这很可能是由新引入的选项引起的

-e, --exit-on-eof
    Exit on End-Of-File, enabled by default if not executed on terminal.

显然,这样做是为了 POSIX 合规性,即防止 EOF 退出而无需-e
然而,因为很多人已经抱怨这破坏了向后兼容性(并且为了修复它,他们必须这样做alias more='more -e'),另一项更改正在酝酿中 - 一项将恢复旧行为并且-e默认启用如果 POSIXLY_CORRECT环境变量未设置或未在终端上执行。因此,可能在下一个版本中,您已经习惯的行为将会回来(只要POSIXLY_CORRECT未设置)。

答案2

不确定这是否有用,但我已经开始使用| tail -n+1 | more而不是仅仅| more(或|less就此而言)。

尝试使用类似的东西:

find . -maxdepth 1 -type f | xargs tail -n+1 | more

这样做的好处是,每个文件的顶部都有一个标头,其中也包含文件名。就像是:

...
==> ./somefile.name <==
...

相关内容