Czasami chcę przesłać kodowane kolorami wyjście dla procesu, np. grep ... ale kiedy potokuję to do innego procesu, np. sed, kody kolorów są tracone ...
Czy jest jakiś sposób na zachowanie tych kodów?
Oto przykład, który traci kolorowe wyjście:
echo barney | grep barney | sed -n 1,$\ p
command-line
colors
pipe
escape-characters
Peter.O
źródło
źródło
less
mogę zaakceptować kolorowątree -C ~/ |less -R
ls -lR --color=always . |less -R
Odpowiedzi:
Wiele programów, które generują kolorowe wydruki, wykrywa, czy pisze do TTY, i wyłącza kolory, jeśli tak nie jest. Jest tak, ponieważ kody kolorów są denerwujące, gdy chcesz tylko przechwycić tekst, więc próbują automatycznie „zrobić właściwą rzecz”.
Najprostszym sposobem na przechwycenie kolorowego wyniku z takiego programu jest nakazanie mu zapisania koloru, nawet jeśli nie jest on podłączony do TTY. Musisz przeczytać dokumentację programu, aby dowiedzieć się, czy ma tę opcję. (np.
grep
ma--color=always
opcję.)Możesz także użyć
expect
skryptu,unbuffer
aby utworzyć pseudo-tty:źródło
stdout
zmierza. Nie jestem do końca pewien, czyunbuffer
działa, gdy wchodzisz do programu, jak i poza nim; Nie mam go tutaj, aby spróbować.unbuffer
informację, to pomaga wyjściu mojego bota IRC jak wyjście w powłoce.Mi to pasuje ;-! (w obecnym środowisku MingW)
# barney wyświetla się jako czerwony tekst
źródło
tree
is colorized a-la dircolors if the LS_COLORS environment variable is set and output is to tty
... Może (?) Istnieje sposób na nakłonienie potoku do myślenia, że generuje on wynik TTY .. lub jakieś inne ogólne obejście. .man tree
... To też ma podobną opcję,-C
... być może jest to wspólna cecha programów, które