需要帮助确定导致 Zypper --no-color 选项被忽略的原因

需要帮助确定导致 Zypper --no-color 选项被忽略的原因

当我发出时zypper --no-color update -y我仍然可以看到 ANSI 代码。这是日志的示例:

Retrieving package glibc-extra-2.31-150300.41.1.x86_64                                                                  (11/460),  64.6 KiB( 27.7 KiB unpacked)
←[2K
Retrieving: glibc-extra-2.31-150300.41.1.x86_64.rpm --------------------------------------------------------------------------------------------------[starting]
←[2K
Retrieving: glibc-extra-2.31-150300.41.1.x86_64.rpm ---------------------------------------------------------------------------------------------[\ (1.1 KiB/s)]
←[2K
Retrieving: glibc-extra-2.31-150300.41.1.x86_64.rpm ..........................................................................................[done (1.1 KiB/s)]
Retrieving package gtk3-data-3.24.34-150400.3.3.1.noarch                                                                (12/460), 111.5 KiB(  7.3 KiB unpacked)
←[2K

值得注意的是,它仅在空行上包含 ANSI 代码。如果没有这个--no-color选项,它将包含更多的内容:在每行的开头和结尾。

如何才能彻底摆脱所有 ANSI 代码?

答案1

zypper实用程序不应使用任何如果终端是“哑终端”( TERM=dumb) 或输出被重定向到非终端,则 ANSI 转义。不幸的是,目前尚不清楚您如何创建“日志”。请随时用相关信息更新问题。

在下面的答案中,我将假设您的版本有问题,zypper并且它忽略了它没有将输出写入非终端的事实。


由于\033[2K逃生用于删除当前行(它是EL或“擦除行”代码,与颜色无关),并不完全清楚您想要获得什么输出,因为仅删除转义符可能会使行上的字符未被擦除。

要删除\033[2K转义,请使用类似的东西

e2k=$( printf '\033[2K' )
your command | sed "s/$e2k//g"

清空具有此转义序列的行(同时删除输出行上的任何内容转义码):

e2k=$( printf '\033[2K' )
your command | sed "s/.*$e2k.*//"

由于\033[2K不移动光标,因此更复杂的方法需要计算当前光标位置并仅清除到该点的行。

你可以删除所有 ANSI 代码,但由于其中一些用于光标定位等操作,您必须指定每个代码要替换的内容,否则您可能会得到一个更加乱码和难以理解的文本文件。在这种情况下,您似乎关心的唯一代码是此答案中提到的代码。

相关内容