Je veux parfois canaliser la sortie codée par couleur d'un processus, par exemple. grep ... mais quand je le dirige vers un autre processus, par exemple. sed, les codes de couleur sont perdus ...
Est-il possible de garder ces codes intacts?
Voici un exemple qui perd la sortie colorée:
echo barney | grep barney | sed -n 1,$\ p
command-line
colors
pipe
escape-characters
Peter.O
la source
la source
less
peut accepter la saisie de texte en couleur (nice :) ... par exemple:tree -C ~/ |less -R
ouls -lR --color=always . |less -R
Réponses:
De nombreux programmes qui génèrent une sortie couleur détectent s'ils écrivent sur un ATS et désactivent les couleurs s'ils ne le sont pas. Cela est dû au fait que les codes de couleur sont gênants lorsque vous souhaitez uniquement capturer le texte. Ils essaient donc de "faire ce qui est bien" automatiquement.
Le moyen le plus simple de capturer la sortie couleur d’un programme comme celui-ci consiste à lui dire d’écrire en couleur même s’il n’est pas connecté à un téléscripteur. Vous devrez lire la documentation du programme pour savoir s'il dispose de cette option. (par exemple,
grep
a l'--color=always
option.)Vous pouvez également utiliser le
expect
scriptunbuffer
pour créer un pseudo-tty comme ceci:la source
stdout
vont. En fait, je ne suis pas sûr que celaunbuffer
fonctionne si vous participez ou non au programme. Je ne l'ai pas installé ici pour essayer.unbuffer
information, cela aide la sortie de mon bot IRC comme la sortie dans le shell.Ça marche pour moi ;-! (dans l'environnement MingW actuel)
# barney est affiché en rouge
la source
tree
is colorized a-la dircolors if the LS_COLORS environment variable is set and output is to tty
... Peut-être (?) Pourrait-il tromper un tuyau en lui faisant croire qu'il est transmis à un ATS ... ou à une solution de contournement générale similaire. .man tree
... Il existe également une option similaire,-C
... peut-être est-ce une caractéristique commune aux programmes