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 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
був лише прикладом. У мене зовсім інша команда (heroku logs), яка знімає кольори під час передачі tee
. І я хочу "виправити / змінити" трійник / трубу, а не команду, яку я виконую.
ls
. Дивіться мою відповідь, яка виправляє проблему для всіх програм, включаючи журнали heroku.
Я розширю script
рішення, подане в коментарі прийнятої відповіді. Використання script
може бути корисним у тому випадку, якщо ви не можете або не хочете встановити пакет очікування, що містить unbuffer
команду.
Роздрукувати ls
вихід у stdout та файл із кольоровими кодами :
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
.