在 Unix 上,如何让 diff 命令的输出看起来像一个手册页?在哪里可以按“b”或“f”进一步阅读或返回?

rac*_*101 6 man diff

您知道当您使用 man 命令阅读手册(例如man ls)并获得分页的输出时,您可以通过按“f”进一步向下阅读和“b”进一步阅读来从上到下阅读(假设您是从上到下从左到右阅读),然后按“q”退出。我希望 diff 的输出以相同的方式运行,因为有时我要阅读一长串差异,但我发现自己必须在终端中一直向上滚动才能阅读输出的开头。

Git diff 命令执行此操作,我开始喜欢它(例如git diff),但我并不总是能够将所有文件置于版本控制之下。

我能想到的最好的方法是将 diff 命令的输出通过管道传输到其他一些命令,但我不确定是哪个。任何人都可以帮忙吗?提供的这种输出行为(如手册页)是否有名称供将来参考?

Jde*_*eBP 11

它被称为“分页输出”或(有些错误地)“分页”……

...并man通过调用您首选的 pager shell 命令来实现,该命令由您的PAGER环境变量命名,根据用于生成手册页输出形式的任何管道的输出。如果您没有指定寻呼机命令,它会回退到默认值。在早期的 Unices 上,默认的寻呼程序manpg. 在您的系统上,它可能是moreless。一些man命令还会查看寻呼机命令的其他环境变量。

通过做man正在做的事情来做到这一点:将你想看到的输出传送到寻呼程序的标准输入中。

你应该给自己买一本关于 Unix 的好书。有很多人可以解释这一点,这是系统的一个非常基本的特征。pager unix more我今天在谷歌图书上搜索了一百多本讨论这个问题的书。(我数到一百就停止了。)


Gil*_*il' 9

该方案是辅助mangit diff调用被称为寻呼机。在现代系统上,默认寻呼机称为less。几十年前,第一个寻呼机是more,之所以这么叫,是因为它显示一个页面,然后等你按一个键来查看“更多”。然后来了less,它也让你回去(可以这么说),证实了“少即是多”(比多)的说法。

git diff有点例外;该diff实用程序的cvs diff子命令,svn diff子命令等只是做他们的计算diff和打印出来的工作。如果要对差异进行分页,则需要显式调用寻呼机:

diff file.old file.new | less
Run Code Online (Sandbox Code Playgroud)

如果你要使用不同的寻呼机mangit diff并调用寻呼机等命令,你可以设置PAGER通过把这个文件中的环境变量,例如~/.profile

export PAGER=most
Run Code Online (Sandbox Code Playgroud)

您不能发出诸如diff自动调用寻呼机之类的命令。您可以创建一个包装函数(放入您的 shell 初始化文件中,例如~/.zshrc用于 zsh 或~/.bashrc用于 bash):

diff () {
  if [ -t 1]; then             # If standard output is a terminal
    command "$@" | less        #    then pipe through less
  else                         # else
    command "$@"               #     run the command (and return its exit status)
  fi
}
Run Code Online (Sandbox Code Playgroud)

警告:这样的功能有时可能会造成破坏。您还可以为寻呼机创建一个字符的别名,例如

alias p=less P=less
Run Code Online (Sandbox Code Playgroud)

因此您可以键入diff … |pdiff … |P当您想要翻阅命令的输出时。


mdp*_*dpc 4

使用 less 命令怎么样...EX:

 ls -l | less -CM
Run Code Online (Sandbox Code Playgroud)