Como obter saída colorida do script bash?

9

Quando executo a greppartir do terminal gnome, recebo uma saída colorida - correspondência facilmente perceptível, números de linha (-n) com cores diferentes etc.

Mas quando executo exatamente o mesmo grepcomando através do script bash, obtenho uma saída plana, sem colorir

Existe uma maneira de obter saída colorida usando o script bash?

zetah
fonte

Respostas:

9

Usar a --coloropção funciona para mim quando executo grep dentro de scripts de shell.

Aqui está um exemplo do que você deseja.

grep -n --color=auto "PATTERN" FILE
Otaviano A. Damiean
fonte
De fato, obrigado. Eu consultei página man grep, mas --color[=WHEN], --colour[=WHEN]me confundiu, embora é explicado muito bem
zetah
3

Aqui está um pequeno script que ajuda você a entender como o tput funciona com o 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;

Isso imprimirá a seguinte saída com formatos como Negrito , Sublinhado, Destaque e cores.

O BASH Script imprime com formatação de texto e CORES

Kesavan Muthuvel
fonte
0

Você tentou adicionar esse alias ao seu ~/.bashrc?

alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
Carlos Ricardo
fonte
Sim, essas linhas estão presentes, mas a saída é infelizmente a mesma (sem cor) quando grep é executado a partir do script bash.
Zetah 29/01/12
Os aliases do shell têm efeito apenas nas sessões interativas do shell por padrão. Você precisa 1) adicionar a --coloropção ao grepcomando explicitamente (seguro) ou 2) ativar a expand_aliasesopção shell e source ~/.bashrc(propenso a problemas devido a outros possíveis aliases). Você pode refinar 1) e definir um variável GREP="grep --color=auto"e uso posterior em $GREPvez de grepem qualquer lugar do seu script.
David Foerster