¿Cómo obtener resultados coloreados del script bash?

9

Cuando ejecuto grepdesde gnome-terminal, obtengo resultados en color: coincidencias fácilmente notables, números de línea (-n) con diferentes colores, etc.

Pero cuando ejecuto exactamente el mismo grepcomando a través del script bash obtengo una salida plana, sin colorear

¿Hay alguna manera de obtener resultados en color usando el script bash?

zetah
fuente

Respuestas:

9

Usar la --coloropción me funciona cuando ejecuto grep dentro de los scripts de shell.

Aquí hay un ejemplo de lo que quieres.

grep -n --color=auto "PATTERN" FILE
Octavian A. Damiean
fuente
De hecho gracias. Hojeé la página de manual de grep pero --color[=WHEN], --colour[=WHEN]me confundí, aunque se explica bien
zetah
3

Aquí hay un pequeño script que lo ayuda a comprender cómo funciona tput 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;

Esto imprimirá la siguiente salida con formatos como BOLD , UNDERLINE, Highlighting y colores.

BASH Script imprime con formato de texto y COLORES

Kesavan Muthuvel
fuente
0

¿Intentaste agregar estos alias a tu ~/.bashrc?

alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
Carlos Ricardo
fuente
Sí, esas líneas están presentes, pero desafortunadamente la salida es la misma (sin color) cuando grep se ejecuta desde el script bash.
zetah
Los alias de shell solo tienen efecto en las sesiones de shell interactivas de forma predeterminada. Debe 1) agregar la --coloropción al grepcomando explícitamente (seguro) o 2) habilitar la expand_aliasesopción de shell y source ~/.bashrc(propenso a problemas debido a otros posibles alias). Puede refinar 1) y definir una variable GREP="grep --color=auto"y luego usarla en $GREPlugar de grepen todas partes en su secuencia de comandos.
David Foerster