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

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

Но когда я выполняю точно такой же grep через bash-скрипт Я получаю вывод на плоскость, без раскраски

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

9
задан 30 January 2012 в 05:18

3 ответа

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

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

grep -n --color=auto "PATTERN" FILE
8
ответ дан 25 May 2018 в 14:46
  • 1
    Благодарю. Я просмотрел страницу grep man, но --color[=WHEN], --colour[=WHEN] меня смутил, хотя объясняется тонкий – zetah 30 January 2012 в 05:50

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

[d3 ]

3
ответ дан 25 May 2018 в 14:46

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

alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
0
ответ дан 25 May 2018 в 14:46
  • 1
    Да, эти строки присутствуют, но выход, к сожалению, такой же (без раскраски), когда grep запускается из сценария bash. – zetah 30 January 2012 в 05:46
  • 2
    Имена оболочек влияют только на интерактивные сеансы оболочки по умолчанию. Вам либо необходимо: 1) добавить параметр --color в команду grep явно (безопасно) или 2) включить опцию оболочки expand_aliases и source ~/.bashrc (подвержен ошибкам из-за возможных других псевдонимов). Вы можете уточнить 1) и определить variabl GREP="grep --color=auto", а затем использовать $GREP вместо grep везде в вашем скрипте. – David Foerster 8 September 2016 в 17:06

Другие вопросы по тегам:

Похожие вопросы: