我有一个启用了颜色的shell:
$ man -P cat blabla > afile
somefile 包含用于着色的转义字符。现在我想将 somefile 输出到终端及其着色。我试过了
$ cat afile
但根本没有格式化。我发现的唯一方法是使用
$ less afile
但我不想要一个寻呼机,我只是想输出文件而不进入某种交互模式。必须有一个简单的命令来做到这一点,但我无法找到它:)
非常感谢
答案 0 :(得分:3)
你看过你创建的文件了吗?它看起来像这样(在VI中查看):
LS(1) BSD General Commands Manual LS(1)
N^HNA^HAM^HME^HE
l^Hls^Hs -- list directory contents
S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS
l^Hls^Hs [-^H-A^HAB^HBC^HCF^HFG^HGH^HHL^HLO^HOP^HPR^HRS^HST^HTU^HUW^HW@^H@a^Hab^Hbc^Hcd^Hde^Hef^Hfg^Hgh^Hhi^Hik^Hkl^Hlm^Hmn^Hno^Hop^Hpq^Hqr^Hrs^Hst^Htu^Huw^Hwx^Hx1^H1] [_^Hf_^Hi_^Hl_^He _^H._^H._^H.]
D^HDE^HES^HSC^HCR^HRI^HIP^HPT^HTI^HIO^HON^HN
For each operand that names a _^Hf_^Hi_^Hl_^He of a type other than directory, l^Hls^Hs
displays its name as well as any requested, associated information. For
each operand that names a _^Hf_^Hi_^Hl_^He of type directory, l^Hls^Hs displays the names
of files contained within that directory, as well as any requested, asso-
ciated information.
请参阅^H
?这意味着备份一个空间。 man
命令生成troff输出,然后将输出管道输出到nroff本身以格式化该输出以供显示。 Troff是一个文本格式化程序,用于格式化 打印的 页面。因此,为了加粗字,troff
将在字母上退格并在其上键入。它做的次数越多,字母就越暗。
当您在终端上使用man
或nroff
时,它会理解B^HB
表示粗体B
,并会以突出显示的终端颜色显示该字母。 less
命令执行相同的操作。
另一方面,您的cat
命令实际上是按原样显示文件。当它看到序列B^HB
时,它会在屏幕上显示B
,备份单个空格,并在之前的B
之上显示另一个B
。由于这是终端而非打印机,因此第二个B
显示在与前一个B
相同的像素之上。
试试这个(因为你在Mac上:
$ CLICOLOR_FORCE=1
$ ls > ls.txt
$ cat ls.txt
请注意,这会显示颜色。设置CLICOLOR_FORCE
环境变量会强制ls
显示彩色输出 ,即使它未显示在终端上 。如果您查看ls.txt
中的VI
,您会看到[34m
和^[[m^[[m
等序列。这告诉ANSI终端设置各种颜色,cat
将显示这些颜色(除非您使用-v
选项)。
换句话说,你的假设是倒退的。 Cat正在为您提供文件的完美版本,而less
命令正在输出,以粗体显示 letter-backspace-letter 序列。
希望这有助于澄清情况。
答案 1 :(得分:1)
man
实际上并没有将终端转义序列放在其输出中。要生成粗体字符,它会输出char <backspace> char
,对于下划线,它会输出_ <backspace> char
。像more
和less
这样的寻呼机会识别这些序列并将它们转换为适当的终端转义序列,以便加粗和加下划线。
cat
只输出文件中的内容,它不知道如何进行特定于终端的翻译。当终端收到<backspace>
时,它只是向上支持光标并用下一个字符输出覆盖它。结果是你得到了没有额外标记的可读文本(这就是为什么man
在下划线时首先发送下划线的原因 - 如果它以另一种方式执行它,你只看到一堆下划线,其中有一个单词的意图)
您可以使用od -c afile | less
查看此信息。您应该看到很多\b
,但没有\e
。
答案 2 :(得分:1)
这是解决方案(当然它是在联机帮助页中的某个地方:D)。我正在寻找的命令叫做ul:
/usr/bin/man -P cat somecommand | ul
它很好地为终端格式化了groff的BACKSPACE转义格式。
感谢大家的帮助