Come ottenere un output colorato dallo script bash?


9

Quando eseguo grepdall'interno di gnome-terminal, ottengo un output colorato - corrispondenza facilmente visibile, numeri di riga (-n) con colori diversi ecc.

Ma quando eseguo esattamente lo stesso grepcomando tramite bash script ottengo un output piano, senza colorazione

C'è un modo per ottenere un output colorato usando lo script bash?

Risposte:


9

L'uso --colordell'opzione funziona per me quando eseguo grep all'interno degli script di shell.

Ecco un esempio di ciò che vuoi.

grep -n --color=auto "PATTERN" FILE

Grazie davvero. Ho sfogliato la pagina man di grep ma --color[=WHEN], --colour[=WHEN]mi ha confuso, anche se è spiegato bene
zetah

3

Ecco un piccolo script che ti aiuta a capire come tput funziona con bash

#!/bin/bash
#@auth kesavan.muthuvel
#@desc - bash with colors :)

B=`tput bold`           #BOLD
D=`tput dim`            #DIM
U=`tput sgr 0 1`        #UNDERLINE
U2=`tput smul`          #UNDERLINE2
NOU=`tput rmul`         #NO UNDERLINE
H=`tput smso`           #HIGHLIGHT
X=`tput sgr0`           #RESET
C='tput setaf '         #COLOR


for i in 0 1 2 3 4 5 6 7 ; do
        c=`$C$i` && echo $c${B}I${U}always$NOU $D love \
           ${U2}colors$NOU \& $c${H}GNU/Linux$X
done;

Questo stamperà il seguente output con formati come BOLD , UNDERLINE, Evidenziazione e colori.

BASH Script stampa con formattazione del testo e COLORI


0

Hai provato ad aggiungere questi alias al tuo ~/.bashrc?

alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'

Sì, quelle linee sono presenti, ma sfortunatamente l'output è lo stesso (senza colorazione) quando grep viene eseguito dallo script bash.
zetah

Gli alias di shell hanno effetto solo sulle sessioni di shell interattive per impostazione predefinita. È necessario 1) aggiungere l' --coloropzione al grepcomando in modo esplicito (sicuro) o 2) abilitare l' expand_aliasesopzione shell e source ~/.bashrc(soggetta a problemi a causa di possibili altri alias). Puoi perfezionare 1) e definire un variabl GREP="grep --color=auto"e utilizzarlo successivamente $GREPinvece che grepovunque nel tuo script.
David Foerster,
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.