Výstup můžete předat programu, který provádí barvení. Existují například programy jako pycolor
:
pycolor module.py
Chcete-li vytvořit svůj vlastní:
red="$(tput setaf 1)"
reset="$(tput sgr0)"
echo $'foo\nbar' | sed -e "s/\(bar\)/$red\1$reset/"
Více o barevném výstupu.
Spíš ne; barva výstupu daného programu je řízena příkazem, nikoli terminálem.
To znamená, že za předpokladu, že váš terminál rozumí únikovým kódům ANSI pro barvu (většina ano), můžete pomocí kódů escape nastavit požadovanou barvu výzvy na začátku výzvy a požadovanou barvu výstupu na konci; to by vedlo k tomu, že vaše příkazové řádky budou mít také jakoukoli barvu, kterou nastavíte pro výstup, ale to je pravděpodobně tak blízko, jak se dostanete k tomu, co hledáte. Například následující:
$ export PS1='\[\033[00;35m\]\u\[\033[00m\]@\[\033[00;35m\]\H\[\033[00m\]:\[\033[00;33m\]\W\[\033[00m\] \$\[\033[00;34m '
zobrazí výzvu, která vypadá takto:
[email protected]:wd $ _
s 'user' a 'host' ve fialové barvě, 'wd' (vaše cwd) v hnědé (tmavě žluté) a vše za '$ ' v tom, co váš terminál používá pro světle modrou. (Výchozí xterm to vykreslí v azurové barvě; zdá se, že gnome-terminal je nastaven na poměrně pěkný odstín chrpově modré.)
Skutečný kód barvy, jak je uveden v nezbytném formátu pro bash, je např. \[\033[00;35m\]
, kde 00;35
je skutečná specifikace barvy; první 00
zřídka se mění, ale mohou vytvářet IIRC tučné (01), podtržené (??) a obrácené video efekty (??), zatímco koncová '35' je skutečná barva, která je v tomto případě fialová.
Je překvapivě těžké najít slušný seznam barevných kódů ANSI, ale barvy popředí se pohybují od 30 do 37 a barvy pozadí od 40 do 47, a to následovně:
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
Mějte na paměti, že vzhledem k tomu, že nastavujete výchozí barvu pro vše, co následuje po vaší výzvě, programy, které spustíte a které nenastavují své vlastní barvy pomocí únikových kódů, převezmou tuto barvu – například pokud spustíte pager, pravděpodobně uvidíte jeho výstup ve stejné barvě, jakou jste nastavili pro jiné příkazy. Mezitím příkazy, které dělají nastavení jejich vlastních barev pomocí únikových kódů bude vaše úsilí zcela ignorovat.
Ano, funguje mi to pro bash, alespoň na linuxu a mac OS.
Nejprve nastavte některé proměnné atributů a výzvu PS1, abyste nechali terminál nastavený s požadovanými atributy příkazového řádku, například:
bold="\[$(tput bold)\]"
none="$(tput sgr0)"
export PS1="\$ $bold"
Poté použijte past bash DEBUG, která se provede těsně před každým příkazem, ke změně atributů textu pro výstup příkazu:
trap 'echo -ne "${none}"' DEBUG