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
.