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-linux
2.37.2
util-linux 2.38
::::::::::::::
此外,在more
2.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 <==
...