ls -l --color=auto | tee output.log
Без трубы / тройника она цветная. Как я могу сделать так, чтобы он оставался цветным во время использования tee(может быть окрашен только на экране, меня не волнуют цвета в журналах).
ls -l --color=auto | tee output.log
Без трубы / тройника она цветная. Как я могу сделать так, чтобы он оставался цветным во время использования tee(может быть окрашен только на экране, меня не волнуют цвета в журналах).
Ответы:
Просто вставьте unbufferперед любой командой, чтобы заставить ее думать, что она записывает в интерактивный вывод, даже если она фактически передается в другой исполняемый файл. Это сохранит цвет в случае ls.
Например
unbuffer ls -l --color=auto | tee output.log
Если у вас его еще нет, установите его в Ubuntu и других дистрибутивах Debian-ish Linux unbuffer.
sudo apt-get install expect-dev
xcodebuild- вместо этого я получил нарезанные линии без цвета. unbuffer xcodebuild | less -Rработал безупречно, однако.
expect-devпосылка. expectдостаточно.
Используйте опцию ls --color=always
--color=auto не будет цветной вывод на конвейер - по понятным причинам.
На главной странице написано следующее:
При --color = auto цветовые коды выводятся, только если стандартный вывод подключен к терминалу (tty).
ls -lбыл просто примером. У меня совершенно другая команда (логи герою), которая удаляет цвета при передаче по трубопроводу tee. И я хочу «исправить / изменить» тройник / трубу, а не команду, которую я выполняю.
ls. Смотрите мой ответ, который решает проблему для всех программ, включая логи герою.
Я расширю scriptрешение, приведенное в комментарии к принятому ответу. Использование scriptможет быть полезно, если вы не можете или не хотите устанавливать ожидаемый пакет, содержащий unbufferкоманду.
Вывести ls вывод в стандартный вывод и файл с цветовыми кодами :
script -efq output.log -c "ls -l --color=auto"
где ( man script):
-e, --return Return the exit code of the child process. Uses the same format as bash termination on signal termination exit code is 128+n. -f, --flush Flush output after each write. This is nice for telecooperation: one person does `mkfifo foo; script -f foo', and another can supervise real-time what is being done using `cat foo'. -q, --quiet Be quiet (do not write start and done messages to either standard output or the typescript file).
Просмотр выходного файла с цветами:
less -r output.log
-eтак же, как --return- нет необходимости в обоих; -efqесть --return --flush --quiet.