grepの色の仕組み(その2)

続きです。

色が付く時は、[ABC]が表示されて、

takk@deb9:~/tmp/grep-3.1/src$ ./grep --color colorize grep.c

色が付かない時は、[ABC]が表示されません。

takk@deb9:~/tmp/grep-3.1/src$ ./grep --color colorize grep.c | tail

つまり、print_start_colorizeが実行されていないってことですね。

print_start_colorizeを実行する箇所でも見てみます。

 301 /* SGR utility functions.  */
 302 static void
 303 pr_sgr_start (char const *s)
 304 {
 305   if (*s)
 306     print_start_colorize (sgr_start, s);
 307 }

文字列がNULLなら実行しないようです。
では、ここにもprintfを埋め込んでみます。

 301 /* SGR utility functions.  */
 302 static void
 303 pr_sgr_start (char const *s)
 304 {
 305   printf("%s",*s == 0 ? "<NULL>":"<STRING>");
 306   if (*s)
 307     print_start_colorize (sgr_start, s);
 308 }

ビルド。

takk@deb9:~/tmp/grep-3.1/src$ make
  CC       grep.o
  CCLD     grep
takk@deb9:~/tmp/grep-3.1/src$

パイプなし、パイプあり、それぞれの出力を見ると、

パイプがある時は、埋め込んだ文字列がどちらも表示されていません。
pr_sgr_startも実行されていないってことになります。

つづく

コメント

タイトルとURLをコピーしました