Библиотека вывода цветного сценария оболочки

Я ищу определенный способ создания сценариев оболочки, который генерирует цветной вывод.

К сожалению, мне трудно найти подходящую библиотеку или хорошую технику для этого. Я нашел много полезных, но простых примеров, таких какэтот, Также наиболее полное руководство, которое я нашел до сих пор,этот.

Прежде чем я начну писать свою собственную библиотеку, я хочу проверить, написал ли кто-нибудь ее уже

Если ваше решение не вписывается в приведенные ниже наблюдения, это не проблема. Я также хотел бы прочитать его, чтобы он помог мне, если я решу написать собственное решение

Мои основные проблемы / наблюдения:

Надо быть в безопасности, Хотите избежать вывода мусора, поскольку не все терминалы или пейджеры / редакторы (например, less, more, vim и т. Д.) Поддерживают цветной вывод или более стилизованный вывод (полужирный, мигает, курсив и т. Д.)Должен быть легким и читабельным, С помощьюЭскейп-коды ANSI прямо ужасноecho -e '\033[32mthis is ugly and \033[1;32mvery green\033[0m'Нужно дать мне доступ ко всей цветовой палитре и стилям для текста переднего плана и фона. В большинстве примеров, которые я нашел, используются только основные цвета только для текста переднего плана.Желательно использовать только простые команды например, bash или простые оболочки, встроенные в команды и / или общие команды, которые можно найти в большинстве операционных систем. Например, я могу использоватьраскрасить но мне нужен рубиннемного в порядке) и драгоценный камень colorize установлен (не в порядке)Tput кажется хорошим вариантом поскольку он может довольно хорошо манипулировать курсором оболочки, но он несколько проще / менее гибокредактировать

После некоторого исследования по управлению терминалом и форматированию вывода, я пишуэтот смысл который пытается это сделать. Пока все идет хорошо

 Micha Wiedenmann30 мая 2013 г., 20:28
echo -e '\033[32mthis is ugly and \033[1;32mvery green\033[0m' не так уж и плохо, когда вы используете переменные, такие какRED=\033[32m или даже массив цветов.
 Bruno Penteado31 мая 2013 г., 03:00
В самом деле. Я хотел написать более продвинутую библиотеку, но, вероятно, буду придерживаться форматирования переменных внутри строк

Ответы на вопрос(6)

tput может обрабатывать больше, чем указано на странице, на которую вы ссылаетесь. Всеtput делает вывод символов, которые вы бы включили в вашecho заявление, основанное на том, что появляется в текущем терминалебаза данных termcap / terminfo. Некоторые примеры:

$ tput setaf 5 | hexdump -C
00000000  1b 5b 33 35 6d                                    |.$ tput setaf 17 | hexdump -C
00000000  1b 5b 33 38 3b 35 3b 31  37 6d                    |.[38;5;17m|
$ tput reset | hexdump -C
00000000  1b 63 1b 5b 3f 31 30 30  30 6c 1b 5b 3f 32 35 68  |.c.[?1000l.[?25h|

Вы бы использовали его так же, как вы используете переменную, определенную в вашей сущности; на самом деле, вы можете использовать его дляСоздайте Ваша суть, в переносной манере:

black=$(tput setaf 0)

который я разработал, используя код Андреаса Шаманека в качестве ссылки.

#normal=$(tput sgr0)                      # normal text
normal=

Я использую эти переменные в моих сценариях, как так

echo "${red}hello ${yellow}this is ${green}coloured${normal}"

Проверьте мой инструмент xcol для идей и примеров

https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/

\e[0m' # (works better sometimes) bold=$(tput bold) # make colors bold/bright red="$bold$(tput setaf 1)" # bright red text green=$(tput setaf 2) # dim green text fawn=$(tput setaf 3); beige="$fawn" # dark yellow text yellow="$bold$fawn" # bright yellow text darkblue=$(tput setaf 4) # dim blue text blue="$bold$darkblue" # bright blue text purple=$(tput setaf 5); magenta="$purple" # magenta text pink="$bold$purple" # bright magenta text darkcyan=$(tput setaf 6) # dim cyan text cyan="$bold$darkcyan" # bright cyan text gray=$(tput setaf 7) # dim white text darkgray="$bold"$(tput setaf 0) # bold black = dark gray text white="$bold$gray" # bright white text

Я использую эти переменные в моих сценариях, как так

echo "${red}hello ${yellow}this is ${green}coloured${normal}"

Проверьте мой инструмент xcol для идей и примеров

https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/

Решение Вопроса

Вот модифицированный фрагмент из моеготочечные файлы это должно делать то, что вы хотите

RCol='\e[0m'    # Text Reset

# Regular           Bold                Underline           High Intensity      BoldHigh Intens     Background          High Intensity Backgrounds
Bla='\e[0;30m';     BBla='\e[1;30m';    UBla='\e[4;30m';    IBla='\e[0;90m';    BIBla='\e[1;90m';   On_Bla='\e[40m';    On_IBla='\e[0;100m';
Red='\e[0;31m';     BRed='\e[1;31m';    URed='\e[4;31m';    IRed='\e[0;91m';    BIRed='\e[1;91m';   On_Red='\e[41m';    On_IRed='\e[0;101m';
Gre='\e[0;32m';     BGre='\e[1;32m';    UGre='\e[4;32m';    IGre='\e[0;92m';    BIGre='\e[1;92m';   On_Gre='\e[42m';    On_IGre='\e[0;102m';
Yel='\e[0;33m';     BYel='\e[1;33m';    UYel='\e[4;33m';    IYel='\e[0;93m';    BIYel='\e[1;93m';   On_Yel='\e[43m';    On_IYel='\e[0;103m';
Blu='\e[0;34m';     BBlu='\e[1;34m';    UBlu='\e[4;34m';    IBlu='\e[0;94m';    BIBlu='\e[1;94m';   On_Blu='\e[44m';    On_IBlu='\e[0;104m';
Pur='\e[0;35m';     BPur='\e[1;35m';    UPur='\e[4;35m';    IPur='\e[0;95m';    BIPur='\e[1;95m';   On_Pur='\e[45m';    On_IPur='\e[0;105m';
Cya='\e[0;36m';     BCya='\e[1;36m';    UCya='\e[4;36m';    ICya='\e[0;96m';    BICya='\e[1;96m';   On_Cya='\e[46m';    On_ICya='\e[0;106m';
Whi='\e[0;37m';     BWhi='\e[1;37m';    UWhi='\e[4;37m';    IWhi='\e[0;97m';    BIWhi='\e[1;97m';   On_Whi='\e[47m';    On_IWhi='\e[0;107m';

Тогда вы можете простоecho -e "${Blu}blue ${Red}red ${RCol}etc...."

 Joseph Christopher19 апр. 2014 г., 14:49
На Mac используйте\x1B вместо .\e
 Wallace Sidhrée18 мая 2016 г., 21:28
Если вы используете\033 вместо\e ты нене нужно беспокоиться о поддержке системы.
 MeV17 дек. 2015 г., 14:59
Кто-нибудь знает, как сбросить цвет оболочки до исходного цвета? у меня все стало красным после выполнения скрипта :-D
 markusschwed13 авг. 2014 г., 13:19
Спасибо за фрагмент. Идет и к моим точечным файлам. : D
 Gus Neves27 дек. 2018 г., 05:17
Сделал небольшой скрипт с примерами, который поддерживает даже busybox / ash:gist.github.com/tavinus/925c7c9e67b5ba20ae38637fd0e06b07
 Bruno Penteado31 мая 2013 г., 03:01
Спасибо скромно. Я пишу суть, основанную на вашем ответе (добавил ссылку на мой пост)
 demure18 дек. 2015 г., 21:23
@ MaRco85 эхом'\e[0m' сбросит цвета. Вы также можете начать новый терминал.
 demure31 мая 2013 г., 03:19
Я могу в конечном итоге заимствовать ваш стиль Vars и $ TC Sub Var
 Joseph Christopher22 апр. 2014 г., 09:59
@ Я согласен. Это неэто не работает для меня, и я не уверен, почему. (OS X 10.9.2)
 MeV21 дек. 2015 г., 15:06
Спасибо @demure!
 demure20 апр. 2014 г., 01:10
@JosephChristopher Когда я писал это, я все еще использовал OS X, и/e работал нормально; это также, случается, стандартная escape-последовательность.

Я взял скромноs список как вдохновение и немного подсушил. (И поменял\e в шестнадцатеричное\x1B, поскольку первое неподдерживается в OS X 's Terminal.app со времен Snow Leopard.) ЗдесьЧто я придумал:

## Colours and font styles
## Syntax: echo -e "${FOREGROUND_COLOUR}${BACKGROUND_COLOUR}${STYLE}Hello world!${RESET_ALL}"

# Escape sequence and resets
ESC_SEQ="\x1b["
RESET_ALL="${ESC_SEQ}0m"
RESET_BOLD="${ESC_SEQ}21m"
RESET_UL="${ESC_SEQ}24m"

# Foreground colours
FG_BLACK="${ESC_SEQ}30;"
FG_RED="${ESC_SEQ}31;"
FG_GREEN="${ESC_SEQ}32;"
FG_YELLOW="${ESC_SEQ}33;"
FG_BLUE="${ESC_SEQ}34;"
FG_MAGENTA="${ESC_SEQ}35;"
FG_CYAN="${ESC_SEQ}36;"
FG_WHITE="${ESC_SEQ}37;"
FG_BR_BLACK="${ESC_SEQ}90;"
FG_BR_RED="${ESC_SEQ}91;"
FG_BR_GREEN="${ESC_SEQ}92;"
FG_BR_YELLOW="${ESC_SEQ}93;"
FG_BR_BLUE="${ESC_SEQ}94;"
FG_BR_MAGENTA="${ESC_SEQ}95;"
FG_BR_CYAN="${ESC_SEQ}96;"
FG_BR_WHITE="${ESC_SEQ}97;"

# Background colours (optional)
BG_BLACK="40;"
BG_RED="41;"
BG_GREEN="42;"
BG_YELLOW="43;"
BG_BLUE="44;"
BG_MAGENTA="45;"
BG_CYAN="46;"
BG_WHITE="47;"

# Font styles
FS_REG="0m"
FS_BOLD="1m"
FS_UL="4m"

BR_ цвета "яркий» или же "высокая интенсивность" цвета. Сделано таким образом, вы даже можете смешать их с другими стилями шрифтов. (например, подчеркнут ярко-белый)

Если вы хотите добавить это в закладки, я сделал суть для этого:https://gist.github.com/ian128K/39a490e5aa8d3bb77a8b

Rainbow.sh

использование

Просто импортируйте rainbow.sh и начните использовать доступные функции в ваших скриптах.

source rainbow.sh 

vargreen=$(echogreen "Grass is green")
varred=$(echored "Roses are red")

echo "$vargreen ..Crickets are noisy.. $varred"

 Hugh Perkins05 окт. 2016 г., 09:32
Выглядит хорошо. Лицензия?
 MGP06 окт. 2016 г., 14:44
@ Хью Перкинс Лицензия будет MIT, яЯ обновлю репо позже сегодня.

эхо -е "\ 033 [33; 32м цветной текст " - зеленый

эхо -е "\ 033 [33; 33м цветной текст " - желтый

эхо -е "\ 033 [33; 34м цветной текст " - синий

эхо -е "\ 033 [33; 35м цветной текст " - пурпурный

эхо -е "\ 033 [33; 30м цветной текст " - серый

эхо -е "\ 033 [33; 36м цветной текст " - голубой

http://techietent.blogspot.in/2013/03/how-to-echo-colored-text-in-linux-shell.html

Ваш ответ на вопрос