该命令terraform show
不显示彩色文本,但命令terraform show | less
显示的输出似乎是文本颜色代码:
ESC[0m#module.vpc.module.label.data.null_data_source.tags_as_list_of_maps[2]: data "null_data_source" "tags_as_list_of_maps" {
ESC[1mESC[0mhas_computed_defaultESC[0mESC[0m = "default"
ESC[1mESC[0midESC[0mESC[0m = "static"
ESC[1mESC[0minputsESC[0mESC[0m = {
"key" = "IaC"
"value" = "Terraform"
的输出terraform show | less -R
只是白色,就像在terraform show
没有管道的情况下运行时一样:
# module.subnets.module.public_label.data.null_data_source.tags_as_list_of_maps[0]:
data "null_data_source" "tags_as_list_of_maps" {
has_computed_default = "default"
id = "static"
inputs = {
"key" = "Attributes"
"value" = "k8s-cluster"
知道为什么less
或者可能是终端无法解释这些颜色代码吗?
答案1
您发布的代码片段仅使用两个代码:
ESC[0m
– 重置/正常ESC[1m
– 大胆或增加强度
(来源)
但无论后者出现在哪里,前者都会紧随其后,如下所示:ESC[1mESC[0m
。此外,ESC[0m
开头有一个显式。实际上,所有可打印片段都受 控制ESC[0m
,因此整个片段显示为“正常”。
要了解代码如何工作:
sed "$(printf 's/ESC/\033/g')" <<EOF
ESC[0mNormal ESC[1mBold ESC[0m Normal
EOF
要使用已发布的代码片段复制结果:
sed "$(printf 's/ESC/\033/g')" <<EOF
ESC[0m#module.vpc.module.label.data.null_data_source.tags_as_list_of_maps[2]: data "null_data_source" "tags_as_list_of_maps" {
ESC[1mESC[0mhas_computed_defaultESC[0mESC[0m = "default"
ESC[1mESC[0midESC[0mESC[0m = "static"
ESC[1mESC[0minputsESC[0mESC[0m = {
"key" = "IaC"
"value" = "Terraform"
EOF
还有一个版本X
在每个之前注入,因此您可以看到如果没有立即取消ESC
代码将如何工作:ESC[0m
ESC[1m
sed "$(printf 's/ESC/X\033/g')" <<EOF
ESC[0m#module.vpc.module.label.data.null_data_source.tags_as_list_of_maps[2]: data "null_data_source" "tags_as_list_of_maps" {
ESC[1mESC[0mhas_computed_defaultESC[0mESC[0m = "default"
ESC[1mESC[0midESC[0mESC[0m = "static"
ESC[1mESC[0minputsESC[0mESC[0m = {
"key" = "IaC"
"value" = "Terraform"
EOF
答案2
添加到Kamil Maciorowski 的回答,维基百科说(你似乎已经知道)CSI…… 米序列是“选择图形再现”序列——它们影响外貌文本。但颜色代码都是两位数(一些非标准代码是三位数)。代码 1 表示粗体或强度增加。因此,即使 和 之间有文本ESC[1m
, ESC[0
它仍然是白色的,只是更粗/更亮。