Рейтинг:4

Сохранять цвета в консоли вывода скрипта Bash при ведении журнала

флаг kp

Я хотел бы сохранить цвета в консоли вывода сценария Bash при регистрации и вывести его на консоль.

Когда я запускаю скрипт со следующим кодом, я теряю цвета в консоли.

LOG_FILE="Объединить.log"
нажмите $LOG_FILE

exec > >(tee $LOG_FILE) 2>&1;

Вот скриншоты, чтобы было понятно:

Первый и второй экраны с отключенным логированием (закомментировано) в скрипте:

Экран-1:

Первый экран

Экран-2:

Экран второй

На третьем и четвертом экранах в сценарии включено ведение журнала:

Экран-3:

Третий экран

Экран-4:

Экран четыре

Я много искал, но не нашел решения. Спасибо.

ОС: Ubuntu MATE 21.04

Версия Bash: 5.1.4(1)-выпуск (x86_64-pc-linux-gnu)

флаг hr
Я не думаю, что есть что-то полезное в вопросах и ответах по стеку, которые вы связали, - на самом деле, если вы читаете комментарии, оба опубликованных ответа делают в точности * противоположное * тому, что спрашивают (т.е. * удаляют * цветовые коды из цветного вывода) . Проблема здесь в том, что любые процессы, записывающие в ваш (перенаправленный) stdout / stderr, обнаруживают, что их пункт назначения больше не является терминалом, и удаляют цвета еще до того, как данные попадут в команду tee.
Jags avatar
флаг kp
@steeldriver только что удалил ссылку StackOverflow. Спасибо.
Bruni avatar
флаг cn
Может быть, это поможет: https://askubuntu.com/questions/647805/how-to-print-the-output-of-tree-to-pdf-without-losing-the-color
Jags avatar
флаг kp
@bruni Спасибо. Вы хотели сказать, использовать «ага»? «Потому что я не могу понять, как использовать «ага» с «ти».
Bruni avatar
флаг cn
@Jags да, это то, что я имел в виду, но вы правы, это, вероятно, не сработает с тройником. Я пропустил, что футболка также сбрасывает цвет на консоли.
Bruni avatar
флаг cn
Еще одна попытка, что-то вроде принятого ответа на этот вопрос: https://superuser.com/questions/352697/preserve-colors-while-piping-to-tee
Jags avatar
флаг kp
@bruni Я только что удалил свой предыдущий комментарий. Сначала я думал, что это работает, но на самом деле я получаю ошибки. Он не генерирует никаких журналов.
Jags avatar
флаг kp
@bruni Ошибка, которую я получаю в `Merge.log`, а также в консоли: `не удалось выполнить "exec": нет такого файла или каталога | при выполнении | "spawn -noecho exec" | ("eval" строка тела 1) | вызывается изнутри` `"eval [list spawn -noecho] $argv" | вызывается изнутри | "if {[сравнить строки [lindex $argv 0] "-p"] == 0} {` `# pipe | set stty_init "-echo" | eval [list spawn -noecho] [lrange $argv 1 end] | clo ..." | (файл "/usr/bin/unbuffer", строка 13)`
Bruni avatar
флаг cn
@Jags стоило попробовать ... Вы пытались использовать `script`, как в принятом ответе на этот вопрос: https://stackoverflow.com/questions/3515208/can-colorized-output-be-captured-via-shell- перенаправить
Jags avatar
флаг kp
@bruni Да, я наткнулся на эту ветку StackOverflow еще до публикации этого вопроса, но я не мог понять, как изменить ее для моего варианта использования, чтобы даже попробовать. Спасибо.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.