Как получить цветной вывод из скрипта bash?

9

Когда я выполняю grepиз gnome-терминала, я получаю цветной вывод - легко заметное совпадение, номера строк (-n) с разными цветами и т. Д.

Но когда я выполняю точно такую ​​же grepкоманду через скрипт bash, я получаю плоскую выходную информацию без окраски

Есть ли способ получить цветной вывод с помощью сценария Bash?

zetah
источник

Ответы:

9

Использование этой --colorопции работает для меня, когда я запускаю grep внутри сценариев оболочки.

Вот пример того, что вы хотите.

grep -n --color=auto "PATTERN" FILE
Октавиан А. Дамиан
источник
Действительно спасибо. Я просмотрел страницу руководства по grep, но --color[=WHEN], --colour[=WHEN]смутил меня, хотя это объяснено отлично
Zetah
3

Вот небольшой скрипт, который поможет вам понять, как tput работает с 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;

Это напечатает следующий вывод в таких форматах, как BOLD , UNDERLINE, Highlighting и colors.

BASH Script печатает с форматированием текста и ЦВЕТАМИ

Кесаван Мутхувел
источник
0

Вы пытались добавить этот псевдоним в свой ~/.bashrc?

alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
Карлос Рикардо
источник
Да, эти строки присутствуют, но, к сожалению, вывод такой же (без раскраски), когда grep запускается из скрипта bash.
Зета
По умолчанию псевдонимы оболочки влияют только на сеансы интерактивной оболочки. Вам нужно либо: 1) добавить --colorопцию к grepкоманде в явном виде (безопасно), либо 2) включить expand_aliasesопцию оболочки и source ~/.bashrc(склонность к проблемам из-за возможных других псевдонимов). Вы можете уточнить 1) и определить переменную GREP="grep --color=auto"и использовать ее позже, $GREPа не grepвезде в вашем скрипте.
Дэвид Фёрстер