重定向手册页的奇怪行为

重定向手册页的奇怪行为

我想mc使用将手册页重定向到文本文件man mc > mc,但我不小心执行了man mc > mc grep。结果是一个名为 的文本文件,mc其中包含两个串联的mc手册页。

然后我尝试了man ls > 1 abc,这导致名为的文本文件1包含ls手册页和终端中的错误消息:No manual entry for abc

接下来我尝试了man du > du ls tac。我期望三个串联的du手册页,但实际结果是一个名为包含、和du的手册页的文本文件dulstac

为什么每个命令都会产生它所产生的结果?

答案1

这与 Bash 手册中相对晦涩的部分一致,该部分在 部分下进行了说明外壳语法:

一个简单的命令是一系列可选变量赋值,后跟空格分隔的单词和重定向,并由控制操作符终止。第一个字指定要执行的命令,并作为参数零传递。其余单词作为参数传递给调用的命令。

(强调我的。)

这意味着您可以将任何重定向与命令及其参数“混合”。

例如,echo > world hello相当于echo hello > world.

换句话说,当您运行类似 的命令时man du > du ls tac,相当于运行:

man du ls tac > du

这三个联机帮助页最终都连接到一个名为 的文件中,du这是其输出被重定向或通过管道传送时的行为结果man:它将不再尝试使用分页器,并且本质上将像cat.

答案2

仅供参考/好奇:

我知道我没有回答您的问题,但如果您需要重定向手册页的内容,您可以使用 col(1) 来完成

man 1 col | col -b -x > manfile.foo

相关内容