Bash
如何測試我的程序的輸出是否包含顏色(程式碼)?
我正在開發的程序有一個選項可以啟用/禁用其輸出中的顏色程式碼。
我想測試此功能是否按預期工作。這是我嘗試過的:
$ myprogram | grep -q '\e[32m' # testing for green color $ myprogram | grep -q '\e' $ myprogram | grep -q '\033'
我還嘗試了帶有雙反斜杠且不帶引號的相同命令。
但這些都不起作用。
如何測試我的程序輸出是否包含任何顏色程式碼?
該
grep
命令及其 BRE 和 ERE 變體不能辨識表示 ESC 的序列。您需要使用 perl 擴展 (GNUgrep -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...'
字元串格式,並且您只需要匹配特定顏色,我建議您採用該選項。