为什么使用 rev 作为手册页程序在再次通过 rev 进行管道传输时会失败?

为什么使用 rev 作为手册页程序在再次通过 rev 进行管道传输时会失败?

我最近想到了一个狡猾的技巧,其中涉及将PAGER环境变量设置为rev一个笑话。当我尝试阅读 rev 的手册页时,man rev我看到了与预期相反的手册页。

如果您想在不设置寻呼机的情况下尝试此操作,您可以像这样使用该-P选项:您将看到相反的手册页。manman -P rev revrev

让我困惑的是,你不能简单地通过 rev 管道输出以使其再次正确。我尝试运行man -P rev rev | rev,但并没有以正确的方式获得输出,它仍然是相反的。

有一条错误消息以正确的方式显示,如下所示:

mdoc warning: A .Bl directive has no matching .El (#58)

我认为这是正确的方向,因为它是通过的stderr,而不是stdout

如果您只是再次通过 rev 进行管道传输,则所有文本、错误消息等都将处于正确的方向。

man -P rev rev | rev | rev

这种奇怪行为的原因是什么?

我在 Ubuntu 上的 gnome 终端中使用 bash。

答案1

这是因为man除非将输出发送到终端,否则不会使用寻呼机。如果输出被发送到管道,则它只是cat那里的输出。所以...

man rev | rev | rev

...和...

man -Prev rev | rev | rev

...是等价的。

相关内容