I was trying to change the colours used for matching temporarily. But GREP_COLORS is global in nature.
------- Original Message ------- On Friday, May 27th, 2022 at 3:27 PM, Gary Johnson <garyj...@spocom.com> wrote: > On 2022-05-26, Paul Eggert wrote: > > > On 5/25/22 13:48, goncholden via Bug reports for GNU grep wrote: > > > > > Have been using grep to colour the filename printed by tail using > > > grep, by setting GREP_COLOR. However the setting does not work > > > with GREP_COLORS. > > > > > > Additionally, I could not set colour values with tput commands. > > > > > > tail -v -n "$tm" $file | GREP_COLOR='01;32' $_GREP -e ^ -e '^==> .* <==$' > > > > Sorry, I'm not following. Can you give a test case that I can > > reproduce here? > > > I think the problem is that the OP has used GREP_COLORS to specify > the colors that grep uses, and has then tried to override the > default colors by specifying GREP_COLOR on the command line. But, > as the man page says, in the GREP_COLOR section, > > The mt, ms, and mc capabilities of GREP_COLORS have priority > over it. > > So the GREP_COLOR setting has no effect when GREP_COLORS is also > used, at least when GREP_COLORS contains the ms capability. > > There are a number of solutions to this, depending on what the OP is > trying to achieve with the other values in GREP_COLORS. One is to > clear GREP_COLORS in their command line, e.g., > > tail -v -n "$tm" $file | GREP_COLORS= GREP_COLOR='01;32' $_GREP -e ^ -e '^==> > .* <==$' > > > Another would be to set the ms capability in GREP_COLORS instead of > using GREP_COLOR, e.g., > > tail -v -n "$tm" $file | GREP_COLORS='ms=01;32' $_GREP -e ^ -e '^==> .* <==$' > > > For a demonstration of the problem, try the following. > > $ man grep | grep prevents > > The result is a single line of the man page with "prevents" > highlighted in the default red. > > $ man grep | GREP_COLOR='01;32' grep prevents > > This result is the same except that "prevents" is in green. > > $ export GREP_COLORS='ms=01:33' > $ man grep | grep prevents > $ man grep | GREP_COLOR='01;32' grep prevents > > Now, both results have "prevents" in yellow, which agrees with the > man page. However, the OP expected the GREP_COLOR setting on the > command line to override the GREP_COLORS setting in the environment, > which it doesn't. > > Caveats: > > - I am assuming that $_GREP is grep. > - I don't understand the tput problem. > - I don't know anything about grep colors other than what I just > read in the man page. The question just intrigued me. > > Regards, > Gary > >