У меня есть файл с цветами ANSI.
тест.txt:
\e[0;31mExample\e[0m
Я хотел бы отобразить содержимое этого файла в терминале, как cat
это делается, но я хотел бы также отобразить цвета.
решение1
Я искал решение именно этого вопроса bash. Я чуть не пропустил комментарий @Thomas Dickey, который предоставил мне самое элегантное решение.
echo -e $(cat test.txt)
Некоторые вещи, которые мне не подошли (судя по всему, вы не можете передавать данные на эхо)
cat test.txt | echo -e
или
less -R test.txt
Другая проблема, с которой я столкнулся, заключалась в том, что echo -e не печатал нормально новые строки и смежные пробелы в файле. Чтобы напечатать их, я использовал следующее.
echo -ne $(cat test.txt | sed 's/$/\\n/' | sed 's/ /\\a /g')
Это работает для файла test.txt, содержащего
\e[0;31mExa mple\e[0m
\e[0;31mExample line2\e[0m
решение2
Если вы не видите цвета на cat
элементах управления, вероятно, они повреждены.
Некоторые инструменты удаляют управляющие символы, но оставляют их в конце.
Сравнивать:
echo -e "\e[0;31mExample\e[0m foo"
к
echo -e "[0;31mExample[0m foo"
Вы можете восстановить управляющую последовательность из того, что осталось, хотя это не гарантирует полной безопасности, поскольку используемое вами регулярное выражение может случайно вставить непреднамеренные последовательности символов и т. д. Но, например:
echo -e "[0;31mExample[0m foo" | sed "s:\[\([0-9]*[;m]\):^[[\1:g"
восстановит цвет строки примера.
решение3
Существует пакет, содержащий исполняемый файл, который делает это специально:
ttyrec
Вы можете установить его на производные от Debian установки Linux с помощью
sudo apt install ttyrec
или на RedHat с
sudo yum install ttyrec
Команда для правильного воспроизведения файла выполняется с помощью
ttyplay <filename>
Также ознакомьтесь с пакетом tty2gif, который преобразует подобные файлы в gif.
решение4
Это должно работать по умолчанию. Например, если я делаю ls --color=always > /tmp/a
и затем cat /tmp/a
, я вижу цвета. Проверка с od
подтверждает, что файл использует цвета ANSI.
Поэтому я думаю, вам следует проверить, поддерживает ли ваш терминал цвета ANSI (и включены ли они).