プログラム出力に色(コード)が含まれているかどうかをテストするには?

プログラム出力に色(コード)が含まれているかどうかをテストするには?

私が開発しているプログラムには、出力でカラーコードを有効/無効にするオプションがあります。

この機能が期待どおりに機能するかどうかをテストしたいと思います。私が試したことは次のとおりです。

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

また、二重バックスラッシュを使用し、引用符なしで同じコマンドを試しました。

しかし、これらのどれも機能しません。

プログラムの出力にカラーコードが含まれているかどうかをテストするにはどうすればよいですか?

ベストアンサー1

このgrepコマンドと対応する BRE および ERE バリアントは、ESC を表すシーケンスを認識しません。 Perl拡張(GNU)を使用するgrep -Pか、固定シェル文字列と一致する必要があります。

# 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

シェルが$'...string here...'文字列形式をサポートし、特定の色のみを一致させたい場合は、このオプションを選択することをお勧めします。

おすすめ記事