Wednesday, May 8, 2024
 Popular · Latest · Hot · Upcoming
6
rated 0 times [  6] [ 0]  / answers: 1 / hits: 4630  / 2 Years ago, mon, march 7, 2022, 12:45:37

When running git status -sb I see:



enter image description here



I want to watch (from procps-ng 3.3.3) a repository. The --color option is supposed to keep colours.






Interestingly, it works with ls:



$ watch --color "ls --color"


Showing:



output from ls






However for git the colours disappear:



$ watch --color "git status -sb"


enter image description here






So, why does watch show colours from ls but not from git output?


More From » git

 Answers
7

The following statements are true:




  • watch runs the command in a new shell, sh.

  • .bashrc aliases ls as ls --color=auto to enable colours.

  • sh doesn't inherit or use bash aliases.



So when watch runs ls, it's not asking for colours, it's just running the plain old version. You can circumvent this but—as aditya points out—you also need to enable colours on watch for it to process them properly.



A working example for ls is:



watch --color -- ls --color=always


If you don't pass --color to watch, you'll see a bunch of ugly colour codes inline.






ls --color is interpreted as ls --color=always.



ls --color=auto does not print colour in watch. This suggests that it's inferring colour support from the terminal itself.



For more on the reason why, we can test if the watch shell thinks its a real terminal:



$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal

$ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'"
# ... nothing.


I suspect that some applications are looking at that (or similar) to tell if they should turn on colours or not.


[#26898] Wednesday, March 9, 2022, 2 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
nstitutencert

Total Points: 171
Total Questions: 126
Total Answers: 124

Location: Azerbaijan
Member since Fri, May 12, 2023
1 Year ago
;