Why do colors not show up (control characters) when piping stdout/stderr on *nix systems?

Multi tool use
Multi tool use

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
0
down vote

favorite
1












Why do colors not show up (control characters) when piping stdout/stderr on *nix systems?



When I do:



foo | bar


if foo writes color encoded strings (with control chars) to stdout, they won't show up in bar - is there a way to get them to show up?







share|improve this question
















  • 2




    They do show up. You must be more specific, I suspect that you are talking about specific commands - for example ls detects if it writes to terminal and only then highlights the output. Test for example echo -e 'abce[31mdefe[0mghi' | cat.
    – jimmij
    Oct 14 '17 at 6:02











  • yeah when I am using a terminal, sometimes the colors still don't show up...?
    – Alexander Mills
    Oct 14 '17 at 6:24






  • 1




    Do you see red color with the command I gave or not?
    – jimmij
    Oct 14 '17 at 6:28










  • no I don't but I think that's a different issue
    – Alexander Mills
    Oct 14 '17 at 6:32






  • 1




    It turns out, from comments here and on Stack Overflow, that the real question was about a specific program that the questioner wrote whose message colourization library has a particular behaviour.
    – JdeBP
    Oct 14 '17 at 15:55














up vote
0
down vote

favorite
1












Why do colors not show up (control characters) when piping stdout/stderr on *nix systems?



When I do:



foo | bar


if foo writes color encoded strings (with control chars) to stdout, they won't show up in bar - is there a way to get them to show up?







share|improve this question
















  • 2




    They do show up. You must be more specific, I suspect that you are talking about specific commands - for example ls detects if it writes to terminal and only then highlights the output. Test for example echo -e 'abce[31mdefe[0mghi' | cat.
    – jimmij
    Oct 14 '17 at 6:02











  • yeah when I am using a terminal, sometimes the colors still don't show up...?
    – Alexander Mills
    Oct 14 '17 at 6:24






  • 1




    Do you see red color with the command I gave or not?
    – jimmij
    Oct 14 '17 at 6:28










  • no I don't but I think that's a different issue
    – Alexander Mills
    Oct 14 '17 at 6:32






  • 1




    It turns out, from comments here and on Stack Overflow, that the real question was about a specific program that the questioner wrote whose message colourization library has a particular behaviour.
    – JdeBP
    Oct 14 '17 at 15:55












up vote
0
down vote

favorite
1









up vote
0
down vote

favorite
1






1





Why do colors not show up (control characters) when piping stdout/stderr on *nix systems?



When I do:



foo | bar


if foo writes color encoded strings (with control chars) to stdout, they won't show up in bar - is there a way to get them to show up?







share|improve this question












Why do colors not show up (control characters) when piping stdout/stderr on *nix systems?



When I do:



foo | bar


if foo writes color encoded strings (with control chars) to stdout, they won't show up in bar - is there a way to get them to show up?









share|improve this question











share|improve this question




share|improve this question










asked Oct 14 '17 at 5:50









Alexander Mills

1,9461029




1,9461029







  • 2




    They do show up. You must be more specific, I suspect that you are talking about specific commands - for example ls detects if it writes to terminal and only then highlights the output. Test for example echo -e 'abce[31mdefe[0mghi' | cat.
    – jimmij
    Oct 14 '17 at 6:02











  • yeah when I am using a terminal, sometimes the colors still don't show up...?
    – Alexander Mills
    Oct 14 '17 at 6:24






  • 1




    Do you see red color with the command I gave or not?
    – jimmij
    Oct 14 '17 at 6:28










  • no I don't but I think that's a different issue
    – Alexander Mills
    Oct 14 '17 at 6:32






  • 1




    It turns out, from comments here and on Stack Overflow, that the real question was about a specific program that the questioner wrote whose message colourization library has a particular behaviour.
    – JdeBP
    Oct 14 '17 at 15:55












  • 2




    They do show up. You must be more specific, I suspect that you are talking about specific commands - for example ls detects if it writes to terminal and only then highlights the output. Test for example echo -e 'abce[31mdefe[0mghi' | cat.
    – jimmij
    Oct 14 '17 at 6:02











  • yeah when I am using a terminal, sometimes the colors still don't show up...?
    – Alexander Mills
    Oct 14 '17 at 6:24






  • 1




    Do you see red color with the command I gave or not?
    – jimmij
    Oct 14 '17 at 6:28










  • no I don't but I think that's a different issue
    – Alexander Mills
    Oct 14 '17 at 6:32






  • 1




    It turns out, from comments here and on Stack Overflow, that the real question was about a specific program that the questioner wrote whose message colourization library has a particular behaviour.
    – JdeBP
    Oct 14 '17 at 15:55







2




2




They do show up. You must be more specific, I suspect that you are talking about specific commands - for example ls detects if it writes to terminal and only then highlights the output. Test for example echo -e 'abce[31mdefe[0mghi' | cat.
– jimmij
Oct 14 '17 at 6:02





They do show up. You must be more specific, I suspect that you are talking about specific commands - for example ls detects if it writes to terminal and only then highlights the output. Test for example echo -e 'abce[31mdefe[0mghi' | cat.
– jimmij
Oct 14 '17 at 6:02













yeah when I am using a terminal, sometimes the colors still don't show up...?
– Alexander Mills
Oct 14 '17 at 6:24




yeah when I am using a terminal, sometimes the colors still don't show up...?
– Alexander Mills
Oct 14 '17 at 6:24




1




1




Do you see red color with the command I gave or not?
– jimmij
Oct 14 '17 at 6:28




Do you see red color with the command I gave or not?
– jimmij
Oct 14 '17 at 6:28












no I don't but I think that's a different issue
– Alexander Mills
Oct 14 '17 at 6:32




no I don't but I think that's a different issue
– Alexander Mills
Oct 14 '17 at 6:32




1




1




It turns out, from comments here and on Stack Overflow, that the real question was about a specific program that the questioner wrote whose message colourization library has a particular behaviour.
– JdeBP
Oct 14 '17 at 15:55




It turns out, from comments here and on Stack Overflow, that the real question was about a specific program that the questioner wrote whose message colourization library has a particular behaviour.
– JdeBP
Oct 14 '17 at 15:55










1 Answer
1






active

oldest

votes

















up vote
1
down vote



accepted











Why do colors not show up (control characters) when piping stdout/stderr on *nix systems?




As commented by jimij, they do show up.



However, some programs (probably most programs outputting ANSI escape codes) are detecting that their output is not a tty by using isatty(3) e.g. as isatty(STDOUT_FILENO); and that is a good feature, because dealing with escapes in pipelines when you don't want them is a pain.



Several programs document a way to force that, e.g. ls(1) has --color=always



So read the documentation of the relevant commands.






share|improve this answer




















  • yeah in my case, I control both foo and bar, and I want to figure out how to get the colors to show up
    – Alexander Mills
    Oct 14 '17 at 6:25










  • You read the documentation of both foo and bar.
    – Basile Starynkevitch
    Oct 14 '17 at 6:26










  • I think you misunderstood - I am authoring foo and bar
    – Alexander Mills
    Oct 14 '17 at 6:27






  • 2




    That should be a different question. Then show the code, perhaps as MCVE and ask it on StackOverflow.
    – Basile Starynkevitch
    Oct 14 '17 at 6:27











  • yeah maybe the package that I use to do the string styling will not do the styling if it's connected in a pipe? dunno
    – Alexander Mills
    Oct 14 '17 at 6:28










Your Answer







StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
convertImagesToLinks: false,
noModals: false,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













 

draft saved


draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f398060%2fwhy-do-colors-not-show-up-control-characters-when-piping-stdout-stderr-on-nix%23new-answer', 'question_page');

);

Post as a guest






























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
1
down vote



accepted











Why do colors not show up (control characters) when piping stdout/stderr on *nix systems?




As commented by jimij, they do show up.



However, some programs (probably most programs outputting ANSI escape codes) are detecting that their output is not a tty by using isatty(3) e.g. as isatty(STDOUT_FILENO); and that is a good feature, because dealing with escapes in pipelines when you don't want them is a pain.



Several programs document a way to force that, e.g. ls(1) has --color=always



So read the documentation of the relevant commands.






share|improve this answer




















  • yeah in my case, I control both foo and bar, and I want to figure out how to get the colors to show up
    – Alexander Mills
    Oct 14 '17 at 6:25










  • You read the documentation of both foo and bar.
    – Basile Starynkevitch
    Oct 14 '17 at 6:26










  • I think you misunderstood - I am authoring foo and bar
    – Alexander Mills
    Oct 14 '17 at 6:27






  • 2




    That should be a different question. Then show the code, perhaps as MCVE and ask it on StackOverflow.
    – Basile Starynkevitch
    Oct 14 '17 at 6:27











  • yeah maybe the package that I use to do the string styling will not do the styling if it's connected in a pipe? dunno
    – Alexander Mills
    Oct 14 '17 at 6:28














up vote
1
down vote



accepted











Why do colors not show up (control characters) when piping stdout/stderr on *nix systems?




As commented by jimij, they do show up.



However, some programs (probably most programs outputting ANSI escape codes) are detecting that their output is not a tty by using isatty(3) e.g. as isatty(STDOUT_FILENO); and that is a good feature, because dealing with escapes in pipelines when you don't want them is a pain.



Several programs document a way to force that, e.g. ls(1) has --color=always



So read the documentation of the relevant commands.






share|improve this answer




















  • yeah in my case, I control both foo and bar, and I want to figure out how to get the colors to show up
    – Alexander Mills
    Oct 14 '17 at 6:25










  • You read the documentation of both foo and bar.
    – Basile Starynkevitch
    Oct 14 '17 at 6:26










  • I think you misunderstood - I am authoring foo and bar
    – Alexander Mills
    Oct 14 '17 at 6:27






  • 2




    That should be a different question. Then show the code, perhaps as MCVE and ask it on StackOverflow.
    – Basile Starynkevitch
    Oct 14 '17 at 6:27











  • yeah maybe the package that I use to do the string styling will not do the styling if it's connected in a pipe? dunno
    – Alexander Mills
    Oct 14 '17 at 6:28












up vote
1
down vote



accepted







up vote
1
down vote



accepted







Why do colors not show up (control characters) when piping stdout/stderr on *nix systems?




As commented by jimij, they do show up.



However, some programs (probably most programs outputting ANSI escape codes) are detecting that their output is not a tty by using isatty(3) e.g. as isatty(STDOUT_FILENO); and that is a good feature, because dealing with escapes in pipelines when you don't want them is a pain.



Several programs document a way to force that, e.g. ls(1) has --color=always



So read the documentation of the relevant commands.






share|improve this answer













Why do colors not show up (control characters) when piping stdout/stderr on *nix systems?




As commented by jimij, they do show up.



However, some programs (probably most programs outputting ANSI escape codes) are detecting that their output is not a tty by using isatty(3) e.g. as isatty(STDOUT_FILENO); and that is a good feature, because dealing with escapes in pipelines when you don't want them is a pain.



Several programs document a way to force that, e.g. ls(1) has --color=always



So read the documentation of the relevant commands.







share|improve this answer












share|improve this answer



share|improve this answer










answered Oct 14 '17 at 6:21









Basile Starynkevitch

7,9231940




7,9231940











  • yeah in my case, I control both foo and bar, and I want to figure out how to get the colors to show up
    – Alexander Mills
    Oct 14 '17 at 6:25










  • You read the documentation of both foo and bar.
    – Basile Starynkevitch
    Oct 14 '17 at 6:26










  • I think you misunderstood - I am authoring foo and bar
    – Alexander Mills
    Oct 14 '17 at 6:27






  • 2




    That should be a different question. Then show the code, perhaps as MCVE and ask it on StackOverflow.
    – Basile Starynkevitch
    Oct 14 '17 at 6:27











  • yeah maybe the package that I use to do the string styling will not do the styling if it's connected in a pipe? dunno
    – Alexander Mills
    Oct 14 '17 at 6:28
















  • yeah in my case, I control both foo and bar, and I want to figure out how to get the colors to show up
    – Alexander Mills
    Oct 14 '17 at 6:25










  • You read the documentation of both foo and bar.
    – Basile Starynkevitch
    Oct 14 '17 at 6:26










  • I think you misunderstood - I am authoring foo and bar
    – Alexander Mills
    Oct 14 '17 at 6:27






  • 2




    That should be a different question. Then show the code, perhaps as MCVE and ask it on StackOverflow.
    – Basile Starynkevitch
    Oct 14 '17 at 6:27











  • yeah maybe the package that I use to do the string styling will not do the styling if it's connected in a pipe? dunno
    – Alexander Mills
    Oct 14 '17 at 6:28















yeah in my case, I control both foo and bar, and I want to figure out how to get the colors to show up
– Alexander Mills
Oct 14 '17 at 6:25




yeah in my case, I control both foo and bar, and I want to figure out how to get the colors to show up
– Alexander Mills
Oct 14 '17 at 6:25












You read the documentation of both foo and bar.
– Basile Starynkevitch
Oct 14 '17 at 6:26




You read the documentation of both foo and bar.
– Basile Starynkevitch
Oct 14 '17 at 6:26












I think you misunderstood - I am authoring foo and bar
– Alexander Mills
Oct 14 '17 at 6:27




I think you misunderstood - I am authoring foo and bar
– Alexander Mills
Oct 14 '17 at 6:27




2




2




That should be a different question. Then show the code, perhaps as MCVE and ask it on StackOverflow.
– Basile Starynkevitch
Oct 14 '17 at 6:27





That should be a different question. Then show the code, perhaps as MCVE and ask it on StackOverflow.
– Basile Starynkevitch
Oct 14 '17 at 6:27













yeah maybe the package that I use to do the string styling will not do the styling if it's connected in a pipe? dunno
– Alexander Mills
Oct 14 '17 at 6:28




yeah maybe the package that I use to do the string styling will not do the styling if it's connected in a pipe? dunno
– Alexander Mills
Oct 14 '17 at 6:28

















 

draft saved


draft discarded















































 


draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f398060%2fwhy-do-colors-not-show-up-control-characters-when-piping-stdout-stderr-on-nix%23new-answer', 'question_page');

);

Post as a guest













































































hcEp gO,CEnd1CTCxya oG6fc,4BDT58TEoaQS3DnoXH7,l,JWDbS5z,sp t,om,Jl5BSsZZTkfL1o,3uOcTF9qDaNLD
sUIZci6 8OLw1r0jg ojfAv

Popular posts from this blog

How to check contact read email or not when send email to Individual?

How many registers does an x86_64 CPU actually have?

Displaying single band from multi-band raster using QGIS