每当我使用命令行工具时,我都希望确保输出能够被明确解释。在我的另一台机器上,我编写了一个 shell 脚本,该脚本会查找位于特定路径下的所有符号链接,并将它们打印到控制台,使其看起来像"<Escaped Path To Symbolic Link>" \e[91m=>\e[0m "<Escaped Path To Target>"
。该脚本解析了 ANSI 转义码;<Escaped Path To Symbolic Link>
和分别是符号链接及其目标的路径,任何不可打印的字符都经过转义,以便它们在控制台上<Escaped Path To Target>
显示为(其中是十六进制数字)。\xHH
H
综上所述,没有任何歧义。如果符号链接或其目标路径包含=>
,则它将与分隔符分隔开来,因为分隔符将显示为红色文本。如果任一路径包含 ANSI 转义代码,则转义字符将在控制台上显示为\e
,从而消除可能存在除红色以外的任何字符的可能性=>
。换行符将呈现为\n
,双引号将显示为\"
。
我知道三种方法可以以tree
某种方式进一步消除输出的歧义:
-q
将使tree
不可打印的字符显示为?
。它们对输出可能产生的任何影响都会被抵消。-C
打开着色。如果与 结合使用-F
,则附加字符将通过不同的颜色与它们所附加的名称区分开来。这样,名称以等号结尾的文件就可以与套接字区分开来。
使用这两个选项仍然会导致不清楚任何?
已替换不可打印字符的字符代表什么字符,并且与实际上是文件或文件夹名称一部分的问号无法区分。如果->
用于指示符号链接指向的序列位于路径中,则由于路径中的空格被转换为 ,因此它是可区分的\
。
如何使输出完全明确?