Без трубы / тройника она цветная. Как я могу сделать так, чтобы он оставался цветным во время использования tee(может быть окрашен только на экране, меня не волнуют цвета в журналах).
Просто вставьте unbufferперед любой командой, чтобы заставить ее думать, что она записывает в интерактивный вывод, даже если она фактически передается в другой исполняемый файл. Это сохранит цвет в случае ls.
Например
unbuffer ls -l --color=auto | tee output.log
Если у вас его еще нет, установите его в Ubuntu и других дистрибутивах Debian-ish Linux unbuffer.
Это приводит к тому, что полученный файл содержит цветовые коды (конечно); есть ли способ затем распечатать файл таким образом, который использует цветовые коды и правильно отображает цвета в терминале?
Кайл Стрэнд,
2
Тьфу, это заставляет записи пароля показывать ваш пароль в открытом виде!
AndiDog
@Tgr Это решение не работало для меня в OS X, пытаясь получить необработанный цветной вывод xcodebuild- вместо этого я получил нарезанные линии без цвета. unbuffer xcodebuild | less -Rработал безупречно, однако.
Слипп Д. Томпсон
2
Вам не нужна expect-devпосылка. expectдостаточно.
Яхо
11
Используйте опцию ls --color=always
--color=auto не будет цветной вывод на конвейер - по понятным причинам.
На главной странице написано следующее:
При --color = auto цветовые коды выводятся, только если стандартный вывод подключен к терминалу (tty).
ХОРОШО. Что объясняет его. Но можно ли все-таки как-то увидеть цвета на экране? (В конце концов, это TTY). Я не против, чтобы они НЕ были в лог-файле, но я наверняка хочу, чтобы они были на моем экране.
Павел Гольчицкий
Я думаю, что сделал себя недостаточно ясно. ls -lбыл просто примером. У меня совершенно другая команда (логи герою), которая удаляет цвета при передаче по трубопроводу tee. И я хочу «исправить / изменить» тройник / трубу, а не команду, которую я выполняю.
Павел Гольчицкий,
1
@ Павел, вы не можете легко исправить это в тройнике / трубе, поскольку тройник / труба не снимает эти цветовые коды. Проблема в том, что начальная команда видит, что она не пишет в терминал. Вам нужен псевдотерминал, который действует как канал, но команды видят как терминал.
RedGrittyBrick
Хм ... достаточно справедливо. Я думаю, мне просто нужно признать, что так оно и есть.
Павел Гольчицкий
3
@ PawełGościcki этот ответ только решает проблему для ls. Смотрите мой ответ, который решает проблему для всех программ, включая логи герою.
Имонн О'Брайен-Штрейн
3
Я расширю 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).
Ответы:
Просто вставьте
unbuffer
перед любой командой, чтобы заставить ее думать, что она записывает в интерактивный вывод, даже если она фактически передается в другой исполняемый файл. Это сохранит цвет в случаеls
.Например
Если у вас его еще нет, установите его в Ubuntu и других дистрибутивах Debian-ish Linux
unbuffer
.источник
xcodebuild
- вместо этого я получил нарезанные линии без цвета.unbuffer xcodebuild | less -R
работал безупречно, однако.expect-dev
посылка.expect
достаточно.Используйте опцию ls
--color=always
--color=auto
не будет цветной вывод на конвейер - по понятным причинам.На главной странице написано следующее:
источник
ls -l
был просто примером. У меня совершенно другая команда (логи герою), которая удаляет цвета при передаче по трубопроводуtee
. И я хочу «исправить / изменить» тройник / трубу, а не команду, которую я выполняю.ls
. Смотрите мой ответ, который решает проблему для всех программ, включая логи герою.Я расширю
script
решение, приведенное в комментарии к принятому ответу. Использованиеscript
может быть полезно, если вы не можете или не хотите устанавливать ожидаемый пакет, содержащийunbuffer
команду.Вывести
ls
вывод в стандартный вывод и файл с цветовыми кодами :где (
man script
):Просмотр выходного файла с цветами:
источник
-e
так же, как--return
- нет необходимости в обоих;-efq
есть--return --flush --quiet
.