Конвейер вывода ls или tree, чтобы меньше терял цвета?

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необходимости)
Стефан Шазелас
Ты пробовал tree -C | less -R? Я полагаю, что эта -Cопция эквивалентна дереву --color=alwaysLess (по крайней мере, она работает для меня в Ubuntu 12.04).
сталь
@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прохождение через escape-коды для цветовых переходов ANSI. Вы не хотите использовать, так -rкак это вызовет проблемы с длинными линиями, которые обертываются вокруг, так как less неправильно рассчитывает длину строки.

Итак, полное решение:

ls --color | less -R

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

tree -C | less -R
Патрик
источник