Цветной вывод команды Linux
Например, я хотел бы раскрасить вывод команды locate
, чтобы ее было легко отличить от текста другого терминала.
Это должно работать примерно так:
locate -bir pdf | some_command_to_color_the_result
Цвет не должен быть ограничен только для команды locate
: мне нужно общее решение, которое окрашивает текст с помощью конвейеров, например, подает на него выходные данные grep
или cat
.
Если нет встроенной команды Linux, любые советы о том, как ее создать, приветствуются.
Ответы
Ответ 1
norm="$(printf '\033[0m')" #returns to "normal"
bold="$(printf '\033[0;1m')" #set bold
red="$(printf '\033[0;31m')" #set red
boldred="$(printf '\033[0;1;31m')" #set bold, and set red.
somecommand | sed -e "s/someregexp/${boldred}&${norm}/g" # will color any occurence of someregexp in Bold red
printf "%s" "$red" ; locate something ; printf "%s" "$norm" # will color output of locate something in red
#I (ab)use printf "%s" "something", as it more portable than echo,and easy to modify
Существует много других способов (создайте функцию / script, которая может, например, раскрасить регулярное выражение, а затем: somecommand | colorize -c green 'foo.*bar' 'other'
)
Ответ 2
Вы можете использовать escape-последовательности, чтобы изменить цвет шрифта любого вывода на оболочку bash. Вот некоторые цветовые коды, которые вам понадобятся:
BLACK="\033[30m"
RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
BLUE="\033[34m"
PINK="\033[35m"
CYAN="\033[36m"
WHITE="\033[37m"
NORMAL="\033[0;39m"
Как только они определены, вы можете использовать их в обычных командах эха. Например:
echo -e $GREEN this text is green $NORMAL and this is normal
Обратите внимание, что -e не всегда необходимо, но для некоторых ОС (включая osx) требуется для включения escape-последовательностей.
С учетом этих определений вы можете создавать сценарии и каналы для цветного вывода из других команд. Вот полный пример, который я использую для цветного вывода из svn up
:
#!/bin/bash
BLACK="\033[30m"
RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
BLUE="\033[34m"
PINK="\033[35m"
CYAN="\033[36m"
WHITE="\033[37m"
NORMAL="\033[0;39m"
TMPFILE=.cvsup.tmp
svn up > $TMPFILE
svn status >> $TMPFILE
printf $YELLOW
grep -e ^"\? " -e ^"I " $TMPFILE
printf $GREEN
grep -e ^"R " -e ^"U " -e ^"G " $TMPFILE
printf $BLUE
grep -e ^"M " -e ^"E " $TMPFILE
printf $RED
grep -e ^"C " -e ^"! " -e ^"X " -e ^"~ " $TMPFILE
printf $PINK
grep ^"R " $TMPFILE
printf $PINK
grep ^"D " $TMPFILE
printf $CYAN
grep ^"A " $TMPFILE
printf $NORMAL
rm $TMPFILE
Вы также можете посмотреть tput
.
Ответ 3
Как было предложено Джонатаном Леффлером, комментарий опубликован как anwser:
grep --color
предоставит цвет
Ответ 4
Я предпочитаю использовать утилиту выделения:
highlight -O xterm256 -S sh
-S sh
здесь означает обращение к вводу как синтаксис оболочки script.
Дополнительная информация: http://www.andre-simon.de/
Я установил его как псевдоним через ~/.bashrc:
![enter image description here]()
![enter image description here]()
Ответ 5
На мой вопрос ответил следующий вопрос:
1- Я создаю псевдоним в своем .bashrc
alias color='grep --color .'
2- Тогда всякий раз, когда я хочу раскрасить вывод текста конвейера, я использую псевдоним цвета, например:
locate -bir pdf | color
Это приведет к цвету вывода на красный цвет
Ответ 6
Существует намного лучший способ добиться настраиваемой раскраски:
colorit
Вы можете использовать его, как показано в других ответах, через some_command | colorit
, но он хорошо настраивается над .coloritrc
. У меня есть вещи вроде
dnl Define some useful color variables
define(`red', `1')
define(`green', `2')
define(`magenta', `5')
dnl
dnl Mark macro arguments: regexp foreground-color [background-color]
dnl
define(`mark', ``mark "$1"'' `ifelse(`$#', `3', ``"\033[3$2;4$3m"'',
``"\033[3$2m"'')' `"\033[m"')
dnl
divert
mark(`warning', magenta)
mark(`Warning', magenta)
mark(`Traceback', magenta)
mark(`Error', red)
mark(`FAIL', red)
mark(`ERROR', red)
mark(`XFAIL', green)
mark(`ok', green)
mark(`OK', green)
mark(`PASS', green)
и использовать его все время для раскраски вывода компилятора и подобных материалов. Подробнее см. .coloritrc.
Ответ 7
Я думаю, что команда hl, доступная в концентраторе git, может помочь вам:
посмотрите http://www.flashnux.com/notes/page_000022_US.html
Ответ 8
Вы должны взглянуть на команду hl
, доступную на git hub:
git clone http://github.com/mbornet-hl/hl
и далее:
http://www.flashnux.com/notes/page_000022_US.html
hl
- это команда Linux, написанная на C, специально разработанная для окрашивания текстового файла или вывода команды. Вы можете использовать до 42 цветов одновременно и использовать файл конфигурации для упрощения командной строки. Вы можете раскрасить вывод каждой команды, которая может быть передана другой. И если вы знаете, что такое регулярные выражения, вам будет очень легко пользоваться. Вы можете использовать справочную страницу, чтобы понять, как ее использовать.
Ответ 9
Главный инструмент для этого, конечно, lolcat!
locate -bir pdf | lolcat
![enter image description here]()
Для установки:
sudo apt install lolcat
См. man lolcat
для настройки.