我想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
的手册页的文本文件du
ls
tac
。
为什么每个命令都会产生它所产生的结果?
答案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