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).
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ć.
To powoduje, że wynikowy plik zawiera kody kolorów (oczywiście); czy jest jakiś sposób, aby wydrukować plik w sposób, który wykorzystuje kody kolorów i prawidłowo wyświetla kolory w terminalu?
Kyle Strand,
2
Ugh, to sprawia, że hasła wpisują twoje hasło w postaci jawnego tekstu!
AndiDog,
@Tgr To rozwiązanie nie działało dla mnie w OS X, próbując uzyskać surowe kolorowe wydruki xcodebuild- zamiast tego dostałem pocięte linie bez koloru. unbuffer xcodebuild | less -Rdziałało jednak bezbłędnie.
Slipp D. Thompson
2
Nie potrzebujesz expect-devpaczki. expectwystarczy.
Yajo
11
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).
DOBRZE. To wyjaśnia to. Ale czy nadal mogę jakoś zobaczyć kolory na ekranie? (W końcu to TTY). Nie przeszkadza mi to, że NIE mam ich w pliku dziennika, ale na pewno chcę je na ekranie.
Paweł Gościcki,
Myślę, że nie wyraziłem się wystarczająco jasno. 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ę.
Paweł Gościcki,
1
@Pawel, nie można łatwo naprawić w tee / pipe, ponieważ tee / pipe nie usuwają tych kodów kolorów. Problem polega na tym, że polecenie początkowe widzi, że nie zapisuje do terminala. Potrzebujesz pseudo-terminala, który działa jak potok, ale którego polecenia widzą jako terminal.
RedGrittyBrick
Hm ... dość uczciwie. Chyba muszę zaakceptować, że tak właśnie jest.
Paweł Gościcki
3
@ PawełGościcki ta odpowiedź naprawia tylko problem ls. Zobacz moją odpowiedź, która rozwiązuje problem dla wszystkich programów, w tym dzienników heroku.
Eamonn O'Brien-Strain
3
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ę.
Wydrukujls 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).
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 przypadkuls
.Na przykład
Jeśli jeszcze go nie masz, w Ubuntu i innych dystrybucjach systemu Linux Debian możesz to
unbuffer
zrobić.źródło
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:
źródło
ls -l
był tylko przykładem. Mam zupełnie inne polecenie (dzienniki heroku), które usuwa kolory, gdy są przesyłane strumieniowotee
. 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żywaniescript
może być przydatne w przypadku, gdy nie możesz lub nie chcesz instalować oczekiwanego pakietu zawierającegounbuffer
komendę.Wydrukuj
ls
wyjście na standardowe wyjście i plik z kodami kolorów :gdzie (
man script
):Wyświetl plik wyjściowy w kolorach:
źródło
-e
jest tym samym, co--return
- nie ma potrzeby obu;-efq
jest--return --flush --quiet
.