Есть ли способ сохранить раскрашивание текста, переданного по каналу |
в head
, tail
, less
, и т. д.?
решение1
Я предполагаю, что вы передаёте данные ls
и хотите сохранить цветовые коды терминала. Вы можете сказать ls --color=always
(вместо значения по умолчанию --color=auto
), что сохранит коды, но это не гарантирует, что то, к чему вы передаёте данные, знает, как их понимать.
Если вы используете glark
вместо grep
этого , то попытается отобразить с цветами.
Если вы используете less
with -R
, то будет предпринята попытка отображения с цветами.
решение2
Это зависит от программы, которая генерирует вывод в конвейере.
head
, tail
, и т. д. не удаляют цвета, это программа, генерирующая данные, которая обычно проверяет, направляется ли вывод на консоль (цветной), в файл или канал (не цветной)
я нашелеще один SU Q&Aпоказывающий, как обмануть программы, передающие вывод, как будто они отправляют вывод на консоль (эмуляция консоли с помощью unbuffer
)
решение3
В Mac OS X man ls
упоминается CLICOLOR_FORCE
переменная окружения.
Добавление export CLICOLOR_FORCE=1
к ~/.zshrc
или ~/.bashrc
, в зависимости от используемой оболочки, сохраняет цвета при передаче ls
в другие команды, такие как less
, head
и tail
.
решение4
Учитывать
bat
Альтернатива
cat
Установить
brew install bat
--args --flags как
--language
и--theme
Примеры
head | bat --language=zsh -n -p --theme=gruvbox-dark
file.py | bat --language=py -n -p --theme=gruvbox-dark