Цветное перенаправление Printf для записи результатов в двоичный файл

$ export $( generate_env )

Это создаст экспортируемые переменные, используя данные, сгенерированные generate_env.

Testing:

$ cat myenv
A=1
B=2
PIZZA=now

$ export $( cat myenv )

$ echo $PIZZA
now

$ echo $B
2
3
16.05.2017, 02:05
2 ответа

Мы могли бы организовать sed для удаления цветовых кодов из вывода, который поступает в файл журнала. Хотя для этого требуется получить вывод из tee в стандартный вывод и в конвейер, так что это не совсем просто. Там могут быть лучшие способы, чем трюк с перенаправлением подоболочки. Кажется, это работает с Bash и GNU sed, стандартный вывод получает красную ошибку , файл журнала не получает цветовых кодов:

#!/bin/bash
exec > >( (tee -a /dev/fd/7 | sed -Ee $'s/\033''\[[0-9][0-9]?m//g ' > logfile) 7>&1 )
N=$'\033[0m'
R=$'\033[31m'
echo "${R}error${N}: foo"

Еще одна опция в оболочке, позволяющая избежать эффектов повторного открытия /dev/fd/ N в Linux:

#!/bin/bash
exec > >(
        exec 7>logfile
        while IFS= read -r x ; do 
                echo "$x"
                x=${x//$'\033'\[[0-9]m}
                x=${x//$'\033'\[[0-9][0-9]m}
                echo "$x" >&7
        done    
)
N=$'\033[0m'
R=$'\033[31m'
echo "${R}error${N}: foo"

Хотя это, конечно, имеет проблемы с байтами NUL, но вывод журнала, вероятно, не содержит многих из них. Возможно, здесь лучше всего подойдет Perl-скрипт.

Если бы вы заботились только о сообщениях, распечатываемых из скрипта, вы могли бы создать функцию для вывода сообщения как в стандартный вывод, так и в лог-файл, и убрать из последнего цветовые коды. Однако это не помогло бы получить вывод команд в тот же файл журнала.

2
27.01.2020, 21:25

Вы можете использовать фильтр sed/awk/..., чтобы удалить определения цвета из журнала в тройнике на основе перенаправления канала (как было предложено в предыдущем ответе),

... или просто сгенерируйте бесцветный вывод журнала и позвольте инструменту визуализации журнала самому обрабатывать раскрашивание: например, multitail - хороший инструмент кандидат на это.

0
27.01.2020, 21:25

Теги

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