Inny kolor dla polecenia i wyjścia

13

Zastanawiałem się, czy można zmienić kolor wyjścia polecenia w Linuksie na inny kolor niż kolor wiersza poleceń, w którym wpisuję. To jest monotonne i trudne do znalezienia, gdzie zaczyna się wyjście. lubić,

@USER/Destop$ ----> blue
/*
--------------
output file in white
-----------
*/

Dzięki

raj
źródło
2
może używając precmd_functions możesz zmienić kolor zachęty i ustawić go z powrotem przed preexec_functions lub coś podobnego. (w Zsh nie wiem, czy istnieje odpowiednik dla innych powłok)
pataluc,
Właśnie wypróbowałem moją sugestię, ale nie otrzymuję kolorowego polecenia ... :(
pataluc,
1
@pataluc: Udało mi się preexec () { echo -n "\\e[40;34m" }; precmdfunkcja nie jest IMHO konieczne wydaje zsh resetuje sam kolor przed wyświetleniem monitu. Ale działa to tylko w przypadku tych poleceń, które nie zmienią samego koloru (widocznym przykładem jest ls), jak zauważył Aaron. Z cat, bc, wbudowany poleceń powłoki itp (nawet alpine) to działa prawidłowo.
mpy
@ mpy udało mi się również, przy wszystkich poleceniach, zakładając, że raj chce pokolorować polecenie, a nie wynik, dodałem "\\e[40;34m"na końcu mojego PROMPTvar i ustawiłem go ponownie z białym za pomocą preexec () { echo -n "\\e[40;37m" }...
pataluc
1
@pataluc: Przepraszam, teraz rozumiem. Aby pokolorować wiersz poleceń, użyj zle_highlight=(default:fg=cyan)najnowszej wersji zsh. Zsh oferuje również dynamiczne kolory, takie jak fish; patrz sekcja PODKREŚLANIE ZNAKÓW w man zshzle.
mpy

Odpowiedzi:

5

Nie całkiem; kolor wyjścia danego programu jest kontrolowany przez komendę, a nie przez terminal.

To powiedziawszy, zakładając, że twój terminal rozumie kody ucieczki ANSI dla koloru (większość robi), możesz użyć kodów ucieczki, aby ustawić pożądany kolor pytania na początku pytania, a pożądany kolor wyjściowy na końcu; spowodowałoby to, że linie poleceń byłyby również w tym samym kolorze, który ustawiłeś dla danych wyjściowych, ale prawdopodobnie jest to tak blisko, jak masz zamiar dostać się do tego, czego szukasz. Na przykład:

$ export PS1='\[\033[00;35m\]\u\[\033[00m\]@\[\033[00;35m\]\H\[\033[00m\]:\[\033[00;33m\]\W\[\033[00m\] \$\[\033[00;34m '

wyświetli monit, który wygląda następująco:

user@host:wd $ _

z „user” i „host” w kolorze fioletowym, „wd” (twój cwd) w kolorze brązowym (ciemnożółty) i wszystko po „$” w dowolnym kolorze używanym przez terminal dla jasnoniebieskiego. (Domyślny xterm renderuje to w cyjan; terminal gnome wydaje się domyślnie mieć raczej ładny odcień bławatka).

Rzeczywisty kod koloru, określony w niezbędnym formacie dla bash, to np. \[\033[00;35m\]Gdzie 00;35jest rzeczywista specyfikacja koloru; wiodące 00rzadko się zmieniają, ale mogą powodować pogrubienie IIRC (01), podkreślenie (??) i odwrotne wideo (??), podczas gdy końcowe „35” to rzeczywisty kolor, który w tym przypadku jest fioletowy.

Zaskakująco trudno jest znaleźć porządną listę kodów kolorów ANSI, ale kolory pierwszego planu biegną od 30 do 37, a tła od 40 do 47, w następujący sposób:

color        fg  bg
black        30  40
red          31  41
green        32  42
yellow       33  43
blue         34  44
purple       35  45
cyan         36  46
gray/white   37  47

Pamiętaj, że ponieważ ustawiasz domyślny kolor dla wszystkiego, co następuje po monicie, uruchamiane programy, które nie ustawiają własnych kolorów za pomocą kodów specjalnych, przyjmą ten kolor - na przykład, jeśli uruchomisz pager, prawdopodobnie zobaczysz wynik w tym samym kolorze, który ustawiłeś dla innych poleceń. Tymczasem, polecenia, które należy ustawić swoje własne kolory kodem ewakuacyjnych zignoruje swoje wysiłki w całości.

Aaron Miller
źródło
1
Zamiast kodów specjalnych zauważyłem, że użycie tputjest o wiele bardziej czytelne do kolorowania. Na przykład mój monit (w bash) export PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "określa, która godzina, następnie nazwa użytkownika w jednym kolorze, @w innym, a nazwa hosta w trzeciej (obecnie czerwona, biała i niebieska), a następnie drukuje PWD i $ . Łatwo jest zobaczyć na pierwszy rzut oka, gdzie są wiersze pytania podczas przewijania historii.
MattDMo,
jesteś niesamowity ... to wszystko, czego kiedykolwiek chciałem. Dzięki, czy możesz mi powiedzieć, jakie wartości zmienić, jeśli kiedykolwiek chcę zmienić kolory?
raj
i czy istnieje sposób, aby zachować ten sam, co kolor wcześniej?
raj
i dlaczego zmiana nie jest stała, za każdym razem, gdy się loguję, muszę ją ponownie pokolorować
raj
1
Zmiana nie jest trwała, chyba że dodasz ją do pliku inicjalizacji powłoki, którym jest bash ~/.bashrc; znajdź wiersz, w którym ustawia PS1, który jest ciągiem zachęty, i zmodyfikuj go zgodnie z opisem w odpowiedzi. To, co należy zmienić, zależy od tego, jak skonfigurowany jest Twój ciąg zachęty, ale większość istotnych szczegółów znajduje się w mojej odpowiedzi, a resztę można znaleźć, wykonując niewielką wyszukiwarkę Google. Nie jestem pewien, co masz na myśli przez „czy istnieje sposób, aby zachować ten sam, co kolor wcześniej”?
Aaron Miller,
7

Możesz przekazać dane wyjściowe do programu, który wykonuje kolorowanie. Na przykład istnieją programy takie jak pycolor:

pycolor module.py

Aby zbudować własny:

red="$(tput setaf 1)"
reset="$(tput sgr0)"
echo $'foo\nbar' | sed -e "s/\(bar\)/$red\1$reset/"

Więcej na temat wydruków kolorowych.

l0b0
źródło
3

Tak, mam to działa przynajmniej dla bash, na Linux i Mac OS.

Najpierw ustaw niektóre zmienne atrybutów i monit PS1, aby opuścić zestaw terminali z pożądanymi atrybutami wiersza polecenia, na przykład:

bold="\[$(tput bold)\]"
none="$(tput sgr0)"
export PS1="\$ $bold"

Następnie użyj pułapki DEBUG bash, która jest wykonywana tuż przed każdym poleceniem, aby zmienić atrybuty tekstu dla danych wyjściowych polecenia:

trap 'echo -ne "${none}"' DEBUG
jackpipe
źródło
1

Inną alternatywą (na podstawie poleceń) jest grc - ogólny kolorizer. Konfiguracja wyrażeń regularnych używanych do pokolorowania rzeczy zajmuje trochę pracy. Dowiedziałem się o tym tutaj:

/unix/8414/how-to-have-tail-f-show-colored-output?newsletter=1&nlcode=17737|321c

i tu:

/unix/26313/colored-find-output

Nie jestem flash z wyrażeniami regularnymi, więc nie pracowałem dużo z tymi poleceniami.

Joe
źródło
Używam tego ze wszystkimi moimi skryptami dziennika ogona. Cudowny.
stefgosselin
1

Wrzuć je do pliku .bashrc, a następnie zapisz plik źródłowy po zapisaniu.

blk=$'\x1b[90m' # Sets text to black
red=$'\x1b[31m' # Sets text to red
grn=$'\x1b[92m' # Sets text to green
ylw=$'\x1b[93m' # Sets text to yellow
blu=$'\x1b[94m' # Sets text to blue
pur=$'\x1b[95m' # Sets text to purple
cyn=$'\x1b[96m' # Sets text to cyan
wht=$'\x1b[97m' # Sets text to white
rst=$'\x1b[0m'  # resets to default terminal color

Gdy to zrobisz, możesz użyć dowolnego z nich w terminalu na stałe lub do momentu skomentowania zmiennych lub całkowitego ich usunięcia. Możesz ich używać w skryptach na komputerze lub z zastępowaniem poleceń lub cokolwiek innego. Oto następujący przykład, w jaki sposób korzystam z nich osobiście:

echo -e "${red}This text is red.${rst}"
printf "${grn}This text is green.\n${rst"

Zwykle używam ich z indywidualnymi echoi / lub printfkomendami, ale możesz ich użyć do pokolorowania również innych komend, takich jak pingkomenda. Dodaj następujące elementy, .bashrcaby uzyskać efekty. Następnie źródłowy .bashrcplik i uruchom cpingpolecenie, aby użyć pingz fioletowym tekstem. Możesz ustawić każdą funkcję polecenia, aby używała dowolnego koloru obsługiwanego przez terminal.

# Add this to your .bashrc file
colored_ping() {

    echo -e "${pur}$(ping $1)${rst}"
}

alias cping='colored_ping'

Więc spróbuj:

user@linux:~# cping superuser.com

Twój wynik cpingbędzie fioletowy. Jeśli chcesz używać wielu kolorów na tym samym wydruku, możesz dodać je w unikalny sposób. To, jak to zrobisz, zależy wyłącznie od Ciebie. Na przykład:

echo -e "${red}This is red and ${blu}this is blue and ${grn}this is green.${rst}
Jokai
źródło
0

Powinieneś rzucić okiem na komendę hl dostępną w git hub:
github: git clone http://github.com/mbornet-hl/hl
i na:
http://www.flashnux.com/notes/page_000022_US.html
hl to polecenie linux napisane w C, zaprojektowane specjalnie do pokolorowania pliku tekstowego lub wyniku polecenia. Możesz użyć do 42 kolorów jednocześnie i użyć pliku konfiguracyjnego, aby uprościć wiersze poleceń. Możesz pokolorować dane wyjściowe każdego polecenia, które można potokować do innego. A jeśli wiesz, jakie są wyrażenia regularne, korzystanie z nich będzie bardzo łatwe. Możesz użyć strony podręcznika, aby zrozumieć, jak z niej korzystać.

Krzak
źródło