Is there any way to keep colorization of text passed through pipe |
to head
, tail
, less
, etc.?
4 Answers
I presume you are piping from ls
and want to preserve the terminal color codes. You can say ls --color=always
(instead of the default of --color=auto
), which will preserve the codes, but that won't guarantee that the thing you're piping to knows how to understand them.
If you use glark
instead of grep
it will try to display with colors.
If you use less
with -R
it will attempt to display with colors.
-
9I'm piping from
git
. I'v found that it has similar configuration (eg.git config color.diff always
) that keeps colorization. Apr 27, 2012 at 13:59 -
1@Errandir the problem with that configuration is that it will break any script or command that use
git diff
output as input because it will always output the ANSI escape codes. Jun 14, 2012 at 13:14 -
@Errandir, thanks ! I do not have any scripts which rely on a clean output from git diff so this works for me !! Thank you ! Nov 6, 2013 at 15:21
-
2I used this for grep:
grep "string" file.txt | head
to make sure the result from grep was colored I just changed this togrep "string" file.txt --color=always | head
Jul 12, 2017 at 13:23 -
2
It depends on the program that generate the output in the pipe.
head
, tail
, etc aren't the ones removing the colors, it's the program generating the data that usually check if the output is going to the console (colored), a file or pipe (not colored)
I found another SU Q&A showing how to lie to piping programs to output as if they were sending output to a console (emulating a console with unbuffer
)
-
Is there any way to keep colorization in
color=auto
mode (to make program think that output goes to console instead of pipe)? Apr 27, 2012 at 14:07 -
2@KurzedMetal How does a program, for example
head
,tail
, etc., detects that it is being piped to another program (so that it can generate data without colors, etc).– j--Mar 1, 2016 at 5:35 -
1
Consider
bat
An alternative to
cat
Install
brew install bat
--args --flags like
--language
and --theme
Examples
head | bat --language=zsh -n -p --theme=gruvbox-dark
file.py | bat --language=py -n -p --theme=gruvbox-dark
-
1In all fairness, it is not preserving color, it's adding new color based on whatever language its piped and theme assigned. Oct 8, 2021 at 3:44
On Mac OS X man ls
mentions the CLICOLOR_FORCE
environment variable.
Adding export CLICOLOR_FORCE=1
to ~/.zshrc
or ~/.bashrc
, depending on the shell you use, keeps the colors when piping ls
to other commands like less
, head
, and tail
.
head
,tail
, etc aren't the ones removing the colors, it's the program generating the data that usually check if the output is going to the console (colored), a file or pipe (not colored).