Передача виводу ls або дерева менше втрачає кольори?


12

treeі lsможуть відрізняти типи файлів, розмальовуючи імена файлів по-різному.

treeі lsчасто виводить довгий список файлів (включаючи каталоги), тому я передаю висновок stdout в less.

Але lessне зберігає кольори. Як ми можемо змусити його показувати кольори чи якимись альтернативними способами?

Щойно побачив пов’язаний список, але трубопровід до less -Rабо less -rне працює. Моя ОС - Ubuntu 12.04. lessє версія 444: 09 червня 2011 року.


1
@JosephR. інше питання є напівзв’язаним, але не повторюваним. Тут ми говоримо ls(не tree), про які потрібно повідомити деякі реалізації, щоб змусити виводити кольори, коли вихід не надходить до терміналу (крім less -Rнеобхідного)
Stéphane Chazelas

Ви пробували tree -C | less -R? Я думаю, що цей -Cваріант є еквівалентом дерева меншим --color=always(принаймні, це працює для мене на Ubuntu 12.04).
steeldriver

@steeldriver дякую. це працює. завжди treeі без -Cодних завжди виходять кольорами, але чому вони відрізняються при використанні less?
Тім

2 причини @ Тім: 1. lessВидаляє кольори за замовчуванням , якщо ви не дати йому -Rваріант, який говорить , що залишити його, і 2. treeі lsі інші програми , як правило , черга забарвлення, коли вони виявити їх висновок буде іншої програми (наприклад , less) замість того , щоб безпосередньо на термінал, якщо не примусити розмальовку на з -Cабо --color=always.
jw013

2
Про який цей пов’язаний список ви пишете?
Антон

Відповіді:


15

Я припускаю, що ви використовуєте ls --color=auto, що говорить lsпро використання кольору в автоматичному режимі. Режим "Автоматичний" повідомляє lessпро те, чи є STDOUT терміналом, і якщо так, використовуйте колір, інакше не використовуйте колір. Коли труба lsв less, STDOUT не є термінал, це пов'язано з STDIN з less, яка є нормальною трубою.

Розчин, використання ls --colorабо ls --color=always.

Однак зараз це призводить до іншого потенційного питання. Залежно від вашого less, він може не показувати колір, але натомість показувати коди евакуації. Рішення - використовувати less -R. Це говорить про те, lessщоб пройти через коди евакуації для кольорів ANSI. Ви не хочете користуватися, -rоскільки це спричинить проблеми з довгими лініями, які обертаються, оскільки менше не належним чином обчислює довжину рядка.

Тож повне рішення:

ls --color | less -R

Аналогічно для tree:

tree -C | less -R
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.