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.