Где мои коды отмены ANSI идут, когда я подключаюсь к другому процессу? Могу ли я сохранить их?

Я когда-нибудь хочу передать цветовое кодирование на выход из процесса, например. grep ... но когда я подключаю его к другому процессу, например. sed, цветовые коды теряются ...

Является ли какой-то способ сохранить эти коды целыми?

Вот пример, который теряет цветной вывод:

echo barney | grep barney | sed -n 1,$\ p   
28 голосов | спросил Peter.O 7 PMpThu, 07 Apr 2011 16:37:33 +040037Thursday 2011, 16:37:33

2 ответа


33

Многие программы, которые генерируют цветной вывод, обнаруживают, если они пишут в TTY, и отключают цвета, если это не так. Это связано с тем, что цветовые коды раздражают, когда вы хотите только захватить текст, поэтому они стараются «делать правильные вещи» автоматически.

Самый простой способ захвата цветового вывода из такой программы - сказать, что он пишет цвет, даже если он не подключен к TTY. Вам нужно будет прочитать документацию программы, чтобы узнать, есть ли у нее этот параметр. (например, grep имеет опцию --color=always .)

Вы также можете использовать expect script unbuffer создать псевдо-tty следующим образом:

echo barney | unbuffer grep barney | sed -n 1,$\ p
ответил cjm 7 PMpThu, 07 Apr 2011 19:30:20 +040030Thursday 2011, 19:30:20
3

Это работает для меня; (в текущей среде MingW)

echo barney | grep --color=always barney | sed -n '1,$p'
**barney**

# barney отображается как красный текст

$ grep --version
GNU grep 2.5.4

$ sed --version
GNU sed version 4.2.1
ответил shellter 7 PMpThu, 07 Apr 2011 17:59:53 +040059Thursday 2011, 17:59:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132