Jak uzyskać kolorowe wyjście ze skryptu bash?

9

Kiedy wykonuję grepz terminala gnome, otrzymuję kolorowe wyjście - łatwo zauważalne dopasowanie, numery linii (-n) o różnych kolorach itp.

Ale kiedy wykonuję dokładnie to samo greppolecenie za pomocą skryptu bash, otrzymuję wyjście samolotu, bez kolorowania

Czy istnieje sposób na uzyskanie kolorowych wyników za pomocą skryptu bash?

zetah
źródło

Odpowiedzi:

9

Użycie tej --coloropcji działa dla mnie, gdy uruchamiam grep w skryptach powłoki.

Oto przykład tego, czego chcesz.

grep -n --color=auto "PATTERN" FILE
Oktawian A. Damiean
źródło
Rzeczywiście dzięki. --color[=WHEN], --colour[=WHEN]
Przejrzałem
3

Oto mały skrypt, który pomoże Ci zrozumieć, jak tput działa z 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;

Spowoduje to wydrukowanie następujących danych wyjściowych w formatach takich jak BOLD , UNDERLINE, Podświetlanie i kolory.

Druk BASH Script z formatowaniem tekstu i kolorami

Kesavan Muthuvel
źródło
0

Czy próbowałeś dodać te aliasy do swojego ~/.bashrc?

alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
Carlos Ricardo
źródło
Tak, te linie są obecne, ale dane wyjściowe są niestety takie same (bez kolorowania), gdy grep jest uruchamiany ze skryptu bash.
zetah
Aliasy powłoki domyślnie wpływają tylko na interaktywne sesje powłoki. Musisz albo 1) wyraźnie dodać --coloropcję do greppolecenia (bezpiecznie) lub 2) włączyć expand_aliasesopcję powłoki i source ~/.bashrc(podatne na problemy z powodu możliwych innych aliasów). Możesz sprecyzować 1) i zdefiniować variabl, GREP="grep --color=auto"a później używać go $GREPzamiast grepwszędzie w skrypcie.
David Foerster,