Иногда я хочу передать вывод с цветовой кодировкой процесса, например. grep ... но когда я передаю его другому процессу, например. Сед, цветовые коды потеряны ...
Есть ли какой-то способ сохранить эти коды без изменений?
Вот пример, который теряет цветной вывод:
echo barney | grep barney | sed -n 1,$\ p
command-line
colors
pipe
escape-characters
Peter.O
источник
источник
less
может принимать цветной ввод текста (хорошо :) ... например:tree -C ~/ |less -R
илиls -lR --color=always . |less -R
Ответы:
Многие программы, которые генерируют цветной вывод, обнаруживают, пишут ли они в TTY, и отключают цвета, если это не так. Это связано с тем, что цветовые коды раздражают, когда вы хотите захватить только текст, поэтому они пытаются автоматически «делать правильные вещи».
Самый простой способ получить вывод цвета из такой программы - сказать ей писать цвета, даже если она не подключена к TTY. Вам нужно будет прочитать документацию программы, чтобы узнать, есть ли у нее эта опция. (например,
grep
имеет--color=always
возможность.)Вы также можете использовать
expect
скриптunbuffer
для создания псевдо-tty, как это:источник
stdout
идут. Я на самом деле не уверен,unbuffer
работает ли, когда вы работаете как с программой, так и с ней; У меня не установлено здесь, чтобы попробовать.unbuffer
информацию, это помогает выводу моего бота IRC как вывод в оболочке.Меня устраивает ;-! (в текущей среде MingW)
# Барни отображается как красный текст
источник
tree
is colorized a-la dircolors if the LS_COLORS environment variable is set and output is to tty
... Может быть (?) Есть способ обмануть канал, заставляя его думать, что он выводит на TTY ... или какой-то такой общий обходной путь. .man tree
... У него тоже есть похожая опция,-C
... возможно, это обычная функция для программ, которые выводят цветовые escape-коды ..