如何获取命令的原始格式输出?

如何获取命令的原始格式输出?

我想知道程序将哪些控制序列发送到 bash 以格式化其输出。

例如,如果我转储,man less我可以辨别哪些部分是粗体或下划线的。

DDEESSCCRRIIPPTTIIOONN
       _L_e_s_s is a program similar to _m_o_r_e (1), but which allows backward  move-
       ment in the file as well as forward movement.

但是,如果我将ls -G的输出发送到文件,则没有有关其颜色格式的数据。

我使用的是 Mac OS X。

答案1

用于script /tmp/output在新 shell 中开始录制,然后键入命令并查看文件/tmp/output,例如使用编辑器或cat -vet.在 shell 中键入内容exit以退出录制。

答案2

可能最好通过十六进制查看器运行输出(例如,,,od):hexdumpxxd

% man less | hexdump -C | head -5
00000000  4c 45 53 53 28 31 29 20  20 20 20 20 20 20 20 20  |LESS(1)         |
00000010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00000040  20 20 20 20 20 20 20 4c  45 53 53 28 31 29 0a 0a  |       LESS(1)..|
00000050  0a 0a 4e 08 4e 41 08 41  4d 08 4d 45 08 45 0a 20  |..N.NA.AM.ME.E. |
% 

这样您就可以在 中查找任何不可打印的字符ascii(7)

至于“不起作用”的废话,快速浏览一下ls(1)手册会得出:

% env TERM=xterm-color CLICOLOR_FORCE=1 ls -G | hexdump -C | head -3
00000000  1b 5b 33 34 6d 41 70 70  6c 69 63 61 74 69 6f 6e  |.[34mApplication|
00000010  73 1b 5b 6d 1b 5b 6d 0a  1b 5b 33 34 6d 44 65 73  |s.[m.[m..[34mDes|
00000020  6b 74 6f 70 1b 5b 6d 1b  5b 6d 0a 1b 5b 33 34 6d  |ktop.[m.[m..[34m|
% 

答案3

对于 ls 你可以做

export CLICOLOR_FORCE=X
ls -G | cat -vet

答案4

也许一个简单的:

 $ ls --color=always  |  od -cAn

就足够了。

相关内容