Bash

如何測試我的程序的輸出是否包含顏色(程式碼)?

  • April 4, 2022

我正在開發的程序有一個選項可以啟用/禁用其輸出中的顏色程式碼。

我想測試此功能是否按預期工作。這是我嘗試過的:

$ myprogram | grep -q '\e[32m' # testing for green color
$ myprogram | grep -q '\e'
$ myprogram | grep -q '\033'

我還嘗試了帶有雙反斜杠且不帶引號的相同命令。

但這些都不起作用。

如何測試我的程序輸出是否包含任何顏色程式碼?

grep命令及其 BRE 和 ERE 變體不能辨識表示 ESC 的序列。您需要使用 perl 擴展 (GNU grep -P) 或匹配固定的 shell 字元串。

# string with shell formatting, grep uses fixed string match
( tput setaf 2; echo Green text; tput op ) | grep -Fq $'\033[32' && echo found green
found green

# grep uses Perl's PCRE match to match any colour (change "\d+" to "32" for just green)
( tput setaf 2; echo Green text; tput op ) | grep -Pq '\033\[\d+[;m]' && echo found a colour
found a colour

如果您的 shell 支持$'...string here...'字元串格式,並且您只需要匹配特定顏色,我建議您採用該選項。

引用自:https://unix.stackexchange.com/questions/599015