Przesyłanie danych wyjściowych ls lub drzewa, aby mniej traciło kolory?

12

treei lsmoże rozróżniać typy plików, kolorując nazwy plików w różny sposób.

treei lsczęsto wypisuje długą listę plików (w tym katalogów), więc przesyłam do wyjścia standardowe wyjście less.

Ale lessnie zachowuje kolorów. Jak możemy sprawić, by pokazywał kolory lub w inny sposób?

Właśnie zobaczyłem połączoną listę, ale przesyłanie do less -Rlub less -rnie działa. Mój system operacyjny to Ubuntu 12.04. lessjest wersja 444: 09 czerwca 2011 r.

Tim
źródło
1
@JosephR. drugie pytanie jest w połowie związane, ale nie jest duplikatem. Tutaj mówimy ls(nie tree), dla których należy powiedzieć, że niektóre implementacje wymuszają wyjście kolorów, gdy wyjście nie trafia do terminala (oprócz tego, że less -Rjest potrzebne)
Stéphane Chazelas
Próbowałeś tree -C | less -R? -COpcja jest równoważna z drzewa mniej tych --color=always, myślę, że (przynajmniej u mnie działa na Ubuntu 12.04).
steeldriver
@steeldriver dzięki. to działa. treez lub bez -Csamego wyjścia zawsze w kolorach, ale dlaczego różnią się, gdy są używane z less?
Tim
@Tim 2 powodów: 1. lessUsuwa kolory domyślnie, chyba że dasz mu -Ropcję, która mówi, że do opuszczenia go i 2. treea lsi innych programów zwykle włączyć kolorowanie off, gdy wykryje ich wyjście idzie do innego programu (jak less) zamiast bezpośrednio do terminala, chyba że wymusisz kolorowanie za pomocą -Club --color=always.
jw013
2
O czym jest ta połączona lista, o której piszesz?
Anthon

Odpowiedzi:

15

Zakładam, że używasz ls --color=auto, co mówi lso używaniu koloru w trybie „automatycznym”. Tryb „Automatyczny” informuje, lessczy STDOUT jest terminalem, a jeśli tak, użyj koloru, w przeciwnym razie nie używaj koloru. Kiedy wpinasz lsdo less, STDOUT nie jest terminalem, jest podłączony do STDIN less, czyli normalnej rury.

Rozwiązanie, użycie ls --colorlub ls --color=always.

Jednak teraz prowadzi to do kolejnego potencjalnego problemu. W zależności od twojego less, może nie wyświetlać koloru, ale zamiast tego wyświetlać kody ucieczki. Rozwiązaniem jest użyć less -R. To mówi, lessaby przejść przez kody ucieczki dla kolorów ucieczki ANSI. Nie chcesz używać, -rponieważ spowoduje to problemy z długimi, owijającymi się liniami, ponieważ less nie oblicza poprawnie długości linii.

Tak pełne rozwiązanie:

ls --color | less -R

Podobnie dla tree:

tree -C | less -R
Patrick
źródło