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 unbufferprzed 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 unbufferzrobić.
sudo apt-get install expect-dev
xcodebuild- zamiast tego dostałem pocięte linie bez koloru. unbuffer xcodebuild | less -Rdziałało jednak bezbłędnie.
expect-devpaczki. expectwystarczy.
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 -lbył 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ę scriptrozwiązanie podane w komentarzu do zaakceptowanej odpowiedzi. Używanie scriptmoże być przydatne w przypadku, gdy nie możesz lub nie chcesz instalować oczekiwanego pakietu zawierającego unbufferkomendę.
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
-ejest tym samym, co --return- nie ma potrzeby obu; -efqjest --return --flush --quiet.