Подтвердить что ты не робот

Цветная библиотека вывода script

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

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

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

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

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

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

Изменить

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

4b9b3361

Ответ 1

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

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...."

Ответ 2

echo -e "\ 033 [33; 31m Цветной текст" - красный

echo -e "\ 033 [33; 32m Цветной текст" - зеленый

echo -e "\ 033 [33; 33m Цветной текст" - желтый

echo -e "\ 033 [33; 34m Цветной текст" - синий

echo -e "\ 033 [33; 35m Цветной текст" - Magenta​​p >

echo -e "\ 033 [33; 30m Цветной текст" - Серый

echo -e "\ 033 [33; 36m Color Text" - Cyan

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

Ответ 3

Я взял список скромности в качестве вдохновения и немного иссушил его. (И изменил \e на шестнадцатеричный \x1B, так как первый не поддерживается в OS X 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

Ответ 4

Бесстыдный плагин... проверьте Rainbow.sh

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

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

source rainbow.sh 

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

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

enter image description here

Ответ 5

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

$ tput setaf 5 | hexdump -C
00000000  1b 5b 33 35 6d                                    |.[35m|
$ 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|

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

black=$(tput setaf 0)

Ответ 6

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

#normal=$(tput sgr0)                      # normal text
normal=$'\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}"

Оформить заказ my xcol tool для идей и примеров

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

xcol example