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


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.


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.


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

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.


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}

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ć.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.