Bash цветной текст и трубопровод - PullRequest
3 голосов
/ 19 октября 2011

У меня есть Perl-скрипт, который выводит какой-то цветной текст под bash.Например, при этом будет выведена красная строка:

perl -e 'print "\e[1;31m RED \e[m"

Когда я передаю ее в другую программу, например, vim ... | vim -, я вижу символы преобразования цвета:

^[[1;31m RED ^[[m

и я хочу, чтобы их пропустили.Например, для grep, вы видите цвета в bash, но они пропускаются при перенаправлении вывода.

Как это сделать?

Ответы [ 3 ]

6 голосов
/ 19 октября 2011

Если вы используете Term :: ANSIColor для генерации escape-последовательностей, вы можете установить переменную окружения ANSI_COLORS_DISABLED для отключения генерации escape-последовательности).

Вы можете использовать тест файла -t, чтобы определить, соответствует ли вывод tty (или определить, работает ли ваш скрипт в интерактивном режиме ).

Затем установите переменную окружения в скрипте Perl перед выводом любой последовательности.

Что-то вроде:

use IO::Interactive;

BEGIN { is_interactive() or $ENV{ANSI_COLORS_DISABLED} = 1 }

должен это сделать.

2 голосов
/ 19 октября 2011

Вы должны выяснить, что это за ручка. Я не помню деталей, но можно выяснить, указывает ли дескриптор на файл, псевдотермическое окно терминала или канал

1 голос
/ 19 октября 2011

Для grep grep обнаруживает, что его выход не идет на терминал, и не создает escape-последовательности.

Другой подход - использовать sed, чтобы удалить эти escape-последовательности:

sed 's/\o033\[[0-9;]*m//'

(ПРИМЕЧАНИЕ: существует намного больше escape-последовательностей ANSI , чем эта; но это должно охватывать цвета.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...