$ export $( generate_env )
Это создаст экспортируемые переменные, используя данные, сгенерированные generate_env
.
Testing:
$ cat myenv
A=1
B=2
PIZZA=now
$ export $( cat myenv )
$ echo $PIZZA
now
$ echo $B
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-скрипт.
Если бы вы заботились только о сообщениях, распечатываемых из скрипта, вы могли бы создать функцию для вывода сообщения как в стандартный вывод, так и в лог-файл, и убрать из последнего цветовые коды. Однако это не помогло бы получить вывод команд в тот же файл журнала.
Вы можете использовать фильтр sed
/awk
/..., чтобы удалить определения цвета из журнала в тройнике
на основе перенаправления канала (как было предложено в предыдущем ответе),
... или просто сгенерируйте бесцветный вывод журнала и позвольте инструменту визуализации журнала самому обрабатывать раскрашивание: например, multitail
- хороший инструмент кандидат на это.