Colore diverso per comando e output


13

Mi chiedevo se è possibile cambiare il colore dell'output di un comando in Linux in un colore diverso da quello della riga di comando in cui scrivo. È un po 'monotono e difficile da trovare dove inizia l'output. piace,

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

Grazie


2
magari usando precmd_functions potresti cambiare il colore del prompt e ripristinarlo prima di preexec_functions, o qualcosa del genere. (in zsh, non so se esiste un equivalente per altre conchiglie)
pataluc

ho appena provato il mio suggerimento ma non ricevo il comando colorato ... :(
pataluc

1
@pataluc: ci sono riuscito preexec () { echo -n "\\e[40;34m" }; la precmdfunzione è IMHO non necessaria, sembra che zsh reimposti il ​​colore stesso prima di visualizzare il prompt. Ma questo funziona solo per quei comandi che non alterano il colore stesso (è un esempio di spicco ls) come sottolineato da Aaron. Con cat, bc, builtin comandi di shell, ecc (anche alpine) questo funziona bene.
MP

@mpy sono riuscito anche, con tutti i comandi, supponendo che raj voglia colorare il comando e non il risultato, l'ho aggiunto "\\e[40;34m"alla fine del mio PROMPTvar e lo ho riportato in bianco con preexec () { echo -n "\\e[40;37m" }...
Pataluc

1
@pataluc: mi dispiace, ora capisco. Per colorare la riga di comando basta usare zle_highlight=(default:fg=cyan)con una versione zsh recente. Zsh offre anche una colorazione dinamica, come fish; vedere la sezione IN EVIDENZA DEL PERSONAGGIO in man zshzle.
MP

Risposte:


5

Non proprio; il colore dell'output di un determinato programma è controllato dal comando, non dal terminale.

Detto questo, supponendo che il terminale comprenda i codici di escape ANSI per il colore (la maggior parte lo fanno), è possibile utilizzare 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 anche che le tue righe di comando siano di qualunque colore tu abbia impostato per l'output, ma probabilmente è più vicino 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 messaggio simile a:

user@host: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 usi per l'azzurro. (Un xterm predefinito lo renderà in ciano; gnome-terminal sembra predefinito a una bella tonalità di blu fiordaliso.)

Il codice colore effettivo, come specificato nel formato necessario per bash, è, ad esempio \[\033[00;35m\], dove si 00;35trova la specifica colore effettiva; il 00comando principale cambia raramente, ma può produrre effetti IIRC in grassetto (01), sottolineato (??) e video inverso (??), mentre il '35' finale è il colore effettivo, che in questo caso è il viola.

È sorprendentemente difficile trovare un elenco decente di codici colore ANSI, ma i colori di 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 i codici di escape assumeranno quel colore, ad esempio se esegui un cercapersone, probabilmente vedrai il suo output nello stesso colore che hai impostato per altri comandi. Nel frattempo, i comandi che non impostano i propri colori tramite codici di escape ignoreranno del tutto i vostri sforzi.


1
Invece di codici di escape, ho scoperto che l'utilizzo tputè molto più leggibile per la colorazione. Ad esempio, il mio prompt (in bash) è export PS1="[\t \[$(tput setaf 9)\]\u\[$(tput setaf 15)\]@\[$(tput setaf 12)\]\h \[$(tput sgr0)\]\w ] \$ "che visualizza il tempo, quindi il nome utente in un colore, @in un altro e il nome host in un terzo (rosso, bianco e blu al momento), quindi stampa il PWD e $ . È molto facile vedere a colpo d'occhio dove sono le linee di comando quando si scorre indietro nella cronologia.
MattDMo

sei fantastico ... questo è tutto ciò che ho sempre desiderato. Grazie, potresti dirmi quali valori cambiare se mai volessi cambiare colore?
raj

e c'è un modo per mantenere l'ultimo come il colore prima?
raj

e perché il cambiamento non è permanente, ogni volta che eseguo l'accesso, devo colorarlo di nuovo
raj

1
La modifica non è permanente a meno che non venga aggiunta al file di inizializzazione della shell, che per bash è ~/.bashrc; trova la riga in cui imposta PS1, che è la stringa del prompt, e modificala come descritto nella risposta. Cosa cambiare dipende da come è impostata la tua stringa di prompt, ma la maggior parte dei dettagli salienti sono nella mia risposta, e il resto può essere trovato facendo un po 'di Google. Non sono sicuro di cosa intendi con "c'è un modo per mantenere l'ultimo come il colore prima?"
Aaron Miller,

7

È possibile passare l'output a un programma che esegue la colorazione. Ad esempio, ci sono programmi come pycolor:

pycolor module.py

Per costruire il tuo:

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

Ulteriori informazioni sull'output a colori.


3

Sì, ho funzionato per bash, almeno su Linux e Mac OS.

Innanzitutto, imposta alcune variabili di attributo e il prompt di PS1 per lasciare il terminale impostato con gli attributi della riga di comando desiderati, ad esempio:

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

Quindi, utilizzare la trap DEBUG bash, che viene eseguita appena prima di ogni comando, per modificare gli attributi di testo per l'output del comando:

trap 'echo -ne "${none}"' DEBUG


1

Buttali nel tuo file .bashrc e quindi procedi con il file sorgente dopo il salvataggio.

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

Una volta fatto ciò, è possibile utilizzare uno di questi nel terminale in modo permanente o fino a quando non si commentano le variabili o si eliminano completamente. Puoi usarli negli script sul tuo computer o con la sostituzione dei comandi o altro. Ecco un esempio seguente di come li uso personalmente:

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

Di solito li uso con comandi individuali echoe / o printfma puoi usarli per colorare altri comandi, come il pingcomando. Aggiungi quanto segue .bashrcper ottenere gli effetti. Quindi fonte il tuo .bashrcfile ed esegui il cpingcomando da utilizzare pingcon il testo viola. È possibile impostare ciascuna funzione di comando per utilizzare qualsiasi colore supportato dal proprio terminale.

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

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

alias cping='colored_ping'

Quindi prova:

user@linux:~# cping superuser.com

L'output per cpingsarà viola. Se si desidera utilizzare più colori nello stesso output, è possibile aggiungerli con modalità uniche. Come lo fai dipende completamente da te. Per esempio:

echo -e "${red}This is red and ${blu}this is blue and ${grn}this is green.${rst}

0

Dovresti dare un'occhiata al comando hl disponibile su git hub:
github: git clone http://github.com/mbornet-hl/hl
e su:
http://www.flashnux.com/notes/page_000022_US.html
hl è un comando linux scritto in C, appositamente progettato per colorare un file di testo o l'output di un comando. È possibile utilizzare fino a 42 colori contemporaneamente e utilizzare un file di configurazione per semplificare le righe di comando. È possibile colorare l'output di ogni comando che può essere reindirizzato a un altro. E se sai quali sono le espressioni regolari, sarà molto facile da usare. Puoi usare la pagina man per capire come usarla.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.