ls -l --color=auto | tee output.log
Bez rury / trójnika jest kolorowy. Jak mogę to zrobić, aby pozostało kolorowe podczas używania tee
(można pokolorować tylko na ekranie, nie dbam o kolory w logach).
ls -l --color=auto | tee output.log
Bez rury / trójnika jest kolorowy. Jak mogę to zrobić, aby pozostało kolorowe podczas używania tee
(można pokolorować tylko na ekranie, nie dbam o kolory w logach).
Odpowiedzi:
Po prostu wstaw unbuffer
przed każdą komendą, aby pomyślała, że pisze na interaktywnym wyjściu, nawet jeśli faktycznie jest przesyłana do innego pliku wykonywalnego. Pozwoli to zachować kolor w przypadku ls
.
Na przykład
unbuffer ls -l --color=auto | tee output.log
Jeśli jeszcze go nie masz, w Ubuntu i innych dystrybucjach systemu Linux Debian możesz to unbuffer
zrobić.
sudo apt-get install expect-dev
xcodebuild
- zamiast tego dostałem pocięte linie bez koloru. unbuffer xcodebuild | less -R
działało jednak bezbłędnie.
expect-dev
paczki. expect
wystarczy.
Użyj opcji ls --color=always
--color=auto
nie będzie kolorować danych wyjściowych w potoku - z oczywistych powodów.
Strona główna mówi:
W przypadku --color = auto kody kolorów są wyprowadzane tylko wtedy, gdy standardowe wyjście jest podłączone do terminala (tty).
ls -l
był tylko przykładem. Mam zupełnie inne polecenie (dzienniki heroku), które usuwa kolory, gdy są przesyłane strumieniowo tee
. I chcę „naprawić / zmienić” tee / pipe, a nie polecenie, które wykonuję.
ls
. Zobacz moją odpowiedź, która rozwiązuje problem dla wszystkich programów, w tym dzienników heroku.
Rozwinę script
rozwiązanie podane w komentarzu do zaakceptowanej odpowiedzi. Używanie script
może być przydatne w przypadku, gdy nie możesz lub nie chcesz instalować oczekiwanego pakietu zawierającego unbuffer
komendę.
Wydrukuj ls
wyjście na standardowe wyjście i plik z kodami kolorów :
script -efq output.log -c "ls -l --color=auto"
gdzie ( 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).
Wyświetl plik wyjściowy w kolorach:
less -r output.log
-e
jest tym samym, co --return
- nie ma potrzeby obu; -efq
jest --return --flush --quiet
.