Где мои коды отмены ANSI идут, когда я подключаюсь к другому процессу? Могу ли я сохранить их?
Я когда-нибудь хочу передать цветовое кодирование на выход из процесса, например. grep ... но когда я подключаю его к другому процессу, например. sed, цветовые коды теряются ...
Является ли какой-то способ сохранить эти коды целыми?
Вот пример, который теряет цветной вывод:
echo barney | grep barney | sed -n 1,$\ p
2 ответа
Многие программы, которые генерируют цветной вывод, обнаруживают, если они пишут в TTY, и отключают цвета, если это не так. Это связано с тем, что цветовые коды раздражают, когда вы хотите только захватить текст, поэтому они стараются «делать правильные вещи» автоматически.
Самый простой способ захвата цветового вывода из такой программы - сказать, что он пишет цвет, даже если он не подключен к TTY. Вам нужно будет прочитать документацию программы, чтобы узнать, есть ли у нее этот параметр. (например, grep
имеет опцию --color=always
.)
Вы также можете использовать expect
script unbuffer
создать псевдо-tty следующим образом:
echo barney | unbuffer grep barney | sed -n 1,$\ p
Это работает для меня; (в текущей среде 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