Puoi passare l'output a un programma che esegue la colorazione. Ad esempio, ci sono programmi come pycolor
:
pycolor module.py
Per creare il tuo:
red="$(tput setaf 1)"
reset="$(tput sgr0)"
echo $'foo\nbar' | sed -e "s/\(bar\)/$red\1$reset/"
Maggiori informazioni sull'output a colori.
Non proprio; il colore dell'output di un dato programma è controllato dal comando, non dal terminale.
Detto questo, supponendo che il tuo terminale comprenda i codici di escape ANSI per il colore (la maggior parte lo fa), potresti usare i codici di escape per impostare il colore del prompt desiderato all'inizio del prompt e il colore di output desiderato alla fine; ciò comporterebbe che anche le tue righe di comando siano in qualsiasi colore tu abbia impostato per l'output, ma probabilmente è il più vicino possibile a quello che stai cercando. Ad esempio, quanto segue:
$ export PS1='\[\033[00;35m\]\u\[\033[00m\]@\[\033[00;35m\]\H\[\033[00m\]:\[\033[00;33m\]\W\[\033[00m\] \$\[\033[00;34m '
ti darà un prompt simile a:
[email protected]:wd $ _
con "user" e "host" in viola, "wd" (il tuo cwd) in marrone (giallo scuro) e tutto ciò che segue "$" in qualunque cosa il tuo terminale utilizzi per l'azzurro. (Un xterm predefinito lo renderà in ciano; gnome-terminal sembra impostare per impostazione predefinita una tonalità piuttosto gradevole di blu fiordaliso.)
Il codice colore effettivo, come specificato nel formato necessario per bash, è, ad esempio, \[\033[00;35m\]
, dove 00;35
è la specifica del colore effettivo; il 00
iniziale cambia raramente, ma può produrre effetti IIRC grassetto (01), sottolineato (??) e video inverso (??), mentre il "35" finale è il colore effettivo, che in questo caso è viola.
È sorprendentemente difficile trovare un elenco decente di codici colore ANSI, ma i colori in primo piano vanno da 30 a 37 e quelli di sfondo da 40 a 47, come segue:
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
Tieni presente che, poiché stai impostando un colore predefinito per tutto ciò che segue il tuo prompt, i programmi che esegui che non impostano i propri colori tramite codici di escape prenderanno quel colore, ad esempio se esegui un pager, probabilmente vedrai il suo output nello stesso colore che hai impostato per altri comandi. Nel frattempo, i comandi che fanno impostare i propri colori tramite codici di escape ignorerà completamente i tuoi sforzi.
Sì, ce l'ho con bash, almeno su Linux e Mac OS.
Innanzitutto, imposta alcune variabili di attributo e PS1 richiede di lasciare il terminale impostato con gli attributi della riga di comando desiderati, ad esempio:
bold="\[$(tput bold)\]"
none="$(tput sgr0)"
export PS1="\$ $bold"
Quindi, usa il trap bash DEBUG, che viene eseguito appena prima di ogni comando, per modificare gli attributi di testo per l'output del comando:
trap 'echo -ne "${none}"' DEBUG