Як змінити вихідний колір ехо в Linux


1736

Я намагаюся надрукувати текст у терміналі за допомогою команди echo.

Я хочу надрукувати текст червоним кольором. Як я можу це зробити?


30
Це посилання дуже корисне: misc.flogisoft.com/bash/tip_colors_and_formatting
Pithikos

погляньте на це, на що я відповів на ваше запитання там: stackoverflow.com/a/48216286/3782119
Shayan Amani

Відповіді:


2292

Ви можете використовувати ці ANSI коди евакуації :

Black        0;30     Dark Gray     1;30
Red          0;31     Light Red     1;31
Green        0;32     Light Green   1;32
Brown/Orange 0;33     Yellow        1;33
Blue         0;34     Light Blue    1;34
Purple       0;35     Light Purple  1;35
Cyan         0;36     Light Cyan    1;36
Light Gray   0;37     White         1;37

А потім використовуйте їх у своєму сценарії:

#    .---------- constant part!
#    vvvv vvvv-- the code from above
RED='\033[0;31m'
NC='\033[0m' # No Color
printf "I ${RED}love${NC} Stack Overflow\n"

який друкує loveчервоним кольором.

З коментаря @ james-lim, якщо ви використовуєте echoкоманду, обов'язково використовуйте прапор -e, щоб дозволити втечу зворотньої косої риски .

# Continued from above example
echo -e "I ${RED}love${NC} Stack Overflow"

(не додавати "\n"під час використання echo, якщо ви не хочете додати додатковий порожній рядок)


11
Не працює для мене - вихід:\e[0;31mHello Stackoverflow\e[0m
Бен Гарольд

171
Ви спробували це з "-е"? Він вказує на те, echoщоб увімкнути зворотні риски.
Джеймс Лім

141
У MacOSX, використовуючи \x1Bзамість \e. \033було б нормально для всіх платформ.
Сяо

4
У файлі властивостей мурахи використовуйте unicode для esacpe, напр. Red = \ u001b [0; 31m
приголомшливий користувач Linux

20
Як і msanford, зроблений для tput, ось "ANSI-Rainbow"for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
кожен

970

Ви можете використовувати дивовижну tputкоманду (запропоновану у відповіді Ігнасіо ) для створення термінальних контрольних кодів для всіляких речей.


Використання

Конкретні tputпідкоманди обговорюються пізніше.

Прямий

Виклик tputяк частина послідовності команд:

tput setaf 1; echo "this is red text"

Використовуйте ;замість &&цього, якщо tputпомилки текст все-таки відображається.

Змінні оболонки

Іншим варіантом є використання змінних оболонок:

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
echo "${red}red text ${green}green text${reset}"

tputстворює символьні послідовності, які інтерпретуються терміналом як такі, що мають особливе значення. Вони самі себе не покажуть. Зауважте, що вони все ще можуть бути збережені у файли або оброблені як введення іншими програмами, крім терміналу.

Заміна команд

Можливо, буде зручніше вставляти tputвихідні дані безпосередньо у свої echoрядки, використовуючи підстановку команд :

echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"

Приклад

Наведена вище команда виробляє це в Ubuntu:

Знімок екрана кольорового термінального тексту


Команди кольорів переднього плану та фону

tput setab [1-7] # Set the background colour using ANSI escape
tput setaf [1-7] # Set the foreground colour using ANSI escape

Кольори такі:

Num  Colour    #define         R G B

0    black     COLOR_BLACK     0,0,0
1    red       COLOR_RED       1,0,0
2    green     COLOR_GREEN     0,1,0
3    yellow    COLOR_YELLOW    1,1,0
4    blue      COLOR_BLUE      0,0,1
5    magenta   COLOR_MAGENTA   1,0,1
6    cyan      COLOR_CYAN      0,1,1
7    white     COLOR_WHITE     1,1,1

Існують також не-ANSI версії функцій налаштування кольорів ( setbзамість setab, а не setfзамість них setaf), які використовують різні цифри, не вказані тут.

Команди текстового режиму

tput bold    # Select bold mode
tput dim     # Select dim (half-bright) mode
tput smul    # Enable underline mode
tput rmul    # Disable underline mode
tput rev     # Turn on reverse video mode
tput smso    # Enter standout (bold) mode
tput rmso    # Exit standout mode

Команди руху курсору

tput cup Y X # Move cursor to screen postion X,Y (top left is 0,0)
tput cuf N   # Move N characters forward (right)
tput cub N   # Move N characters back (left)
tput cuu N   # Move N lines up
tput ll      # Move to last line, first column (if no cup)
tput sc      # Save the cursor position
tput rc      # Restore the cursor position
tput lines   # Output the number of lines of the terminal
tput cols    # Output the number of columns of the terminal

Очистити та вставити команди

tput ech N   # Erase N characters
tput clear   # Clear screen and move the cursor to 0,0
tput el 1    # Clear to beginning of line
tput el      # Clear to end of line
tput ed      # Clear to end of screen
tput ich N   # Insert N characters (moves rest of line forward!)
tput il N    # Insert N lines

Інші команди

tput sgr0    # Reset text format to the terminal's default
tput bel     # Play a bell

У вікнах compiz коливаються , belкоманда робить термінал коливатися на секунду, щоб привернути увагу користувача.


Сценарії

tputприймає сценарії, що містять одну команду на рядок, які виконуються в порядку перед tputвиходом.

Уникайте тимчасових файлів, повторюючи багаторядковий рядок та перекладаючи його:

echo -e "setf 7\nsetb 1" | tput -S  # set fg white and bg red

Дивись також

  • Подивитися man 1 tput
  • Дивіться man 5 terminfoповний перелік команд та більш детальну інформацію про ці параметри. (Відповідна tputкоманда вказана у Cap-nameстовпці величезної таблиці, що починається з рядка 81.)

13
Чудова відповідь. Це те, що мені найбільше допомогло. Для всіх, хто цікавився, що мені цікаво, $()це заміна команд . Все tput af 1це генерує рядок кольорового коду, але коди не є друкованими символами, тому введення tput af 1поодинці виведе порожній рядок виводу.
Кріс Міддлтон

5
Примітка: якщо ви використовуєте CygWin і у вас немає встановлення tputncurses
Enrico

3
tput також працює всередині sed для розбору крафт на розбірливий, барвистий крафт
nickboldt

1
Щоб отримати повний список tputкольорів, ознайомтеся з цією відповіддю на Unix StackExchange
Андрій,

Думаю, reset=`tput sgr0`має бути reset=`tput sgr 0`, з пробілом.
monkeypants

832

деякі змінні, які ви можете використовувати:

# Reset
Color_Off='\033[0m'       # Text Reset

# Regular Colors
Black='\033[0;30m'        # Black
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green
Yellow='\033[0;33m'       # Yellow
Blue='\033[0;34m'         # Blue
Purple='\033[0;35m'       # Purple
Cyan='\033[0;36m'         # Cyan
White='\033[0;37m'        # White

# Bold
BBlack='\033[1;30m'       # Black
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green
BYellow='\033[1;33m'      # Yellow
BBlue='\033[1;34m'        # Blue
BPurple='\033[1;35m'      # Purple
BCyan='\033[1;36m'        # Cyan
BWhite='\033[1;37m'       # White

# Underline
UBlack='\033[4;30m'       # Black
URed='\033[4;31m'         # Red
UGreen='\033[4;32m'       # Green
UYellow='\033[4;33m'      # Yellow
UBlue='\033[4;34m'        # Blue
UPurple='\033[4;35m'      # Purple
UCyan='\033[4;36m'        # Cyan
UWhite='\033[4;37m'       # White

# Background
On_Black='\033[40m'       # Black
On_Red='\033[41m'         # Red
On_Green='\033[42m'       # Green
On_Yellow='\033[43m'      # Yellow
On_Blue='\033[44m'        # Blue
On_Purple='\033[45m'      # Purple
On_Cyan='\033[46m'        # Cyan
On_White='\033[47m'       # White

# High Intensity
IBlack='\033[0;90m'       # Black
IRed='\033[0;91m'         # Red
IGreen='\033[0;92m'       # Green
IYellow='\033[0;93m'      # Yellow
IBlue='\033[0;94m'        # Blue
IPurple='\033[0;95m'      # Purple
ICyan='\033[0;96m'        # Cyan
IWhite='\033[0;97m'       # White

# Bold High Intensity
BIBlack='\033[1;90m'      # Black
BIRed='\033[1;91m'        # Red
BIGreen='\033[1;92m'      # Green
BIYellow='\033[1;93m'     # Yellow
BIBlue='\033[1;94m'       # Blue
BIPurple='\033[1;95m'     # Purple
BICyan='\033[1;96m'       # Cyan
BIWhite='\033[1;97m'      # White

# High Intensity backgrounds
On_IBlack='\033[0;100m'   # Black
On_IRed='\033[0;101m'     # Red
On_IGreen='\033[0;102m'   # Green
On_IYellow='\033[0;103m'  # Yellow
On_IBlue='\033[0;104m'    # Blue
On_IPurple='\033[0;105m'  # Purple
On_ICyan='\033[0;106m'    # Cyan
On_IWhite='\033[0;107m'   # White

Характер втечі відповідно в bash , hex та octal відповідно:

|       | bash  | hex    | octal   | NOTE                         |
|-------+-------+--------+---------+------------------------------|
| start | \e    | \x1b   | \033    |                              |
| start | \E    | \x1B   | -       | x cannot be capital          |
| end   | \e[0m | \x1m0m | \033[0m |                              |
| end   | \e[m  | \x1b[m | \033[m  | 0 is appended if you omit it |
|       |       |        |         |                              |

короткий приклад:

| color       | bash         | hex            | octal          | NOTE                                  |
|-------------+--------------+----------------+----------------+---------------------------------------|
| start green | \e[32m<text> | \x1b[32m<text> | \033[32m<text> | m is NOT optional                     |
| reset       | <text>\e[0m  | <text>\1xb[0m  | <text>\033[om  | o is optional (do it as best practice |
|             |              |                |                |                                       |

виключення баш:

Якщо ви збираєтесь використовувати ці коди у своїх спеціальних змінних bash

  • PS0
  • PS1
  • PS2 (= це для запиту)
  • PS4

вам слід додати додаткових символів втечі, щоб може правильно їх інтерпретувати. Без додавання додаткових символів втечі це працює, але ви зіткнетеся з проблемами, коли використовуєте Ctrl + rдля пошуку в своїй історії.

виняток для bash

Ви повинні додати \[перед початковим кодом ANSI та додати \]після закінчення.
Приклад:
у звичайному використанні: \033[32mThis is in green\033[0m
для PS0 / 1/2/4: \[\033[32m\]This is in green\[\033[m\]

\[є для початку послідовності символів, що не друкуються
\] , для закінчення послідовності символів, що не друкуються

Порада: для запам'ятовування його можна спершу додати, \[\]а потім покласти між собою свій ANSI-код:
- \[start-ANSI-code\]
-\[end-ANSI-code\]

тип послідовності кольорів:

  1. 3/4 біт
  2. 8 біт
  3. 24 біт

Перш ніж зануритися в ці кольори, ви повинні знати про 4 режими з цими кодами:

1. кольоровий режим

Він змінює стиль кольорового НЕ тексту. Наприклад, зробіть колір яскравішим або темнішим.

  • 0 скинути
  • 1; легше звичайного
  • 2; темніше звичайного

Цей режим не підтримується широко. Це повна підтримка на Gnome-Terminal.

2. текстовий режим

Цей режим призначений для зміни стилю тексту НЕ кольором.

  • 3; курсивом
  • 4; підкреслити
  • 5; блимає (повільно)
  • 6; блимає (швидко)
  • 7; зворотний
  • 8; ховатися
  • 9; викреслювати

і майже підтримуються.
Наприклад, KDE-Konsole підтримує, 5;але Gnome-Terminal не робить, а Gnome підтримує, 8;але KDE ні.

3. режим переднього плану

Цей режим призначений для фарбування переднього плану.

4. фоновий режим

Цей режим призначений для фарбування фону.

У таблиці нижче наведено короткий підсумок 3/4-бітної версії кольору ANSI

|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| color-mode | octal    | hex     | bash  | description      | example (= in octal)         | NOTE                                 |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          0 | \033[0m  | \x1b[0m | \e[0m | reset any affect | echo -e "\033[0m"            | 0m equals to m                       |
|          1 | \033[1m  |         |       | light (= bright) | echo -e "\033[1m####\033[m"  | -                                    |
|          2 | \033[2m  |         |       | dark (= fade)    | echo -e "\033[2m####\033[m"  | -                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|  text-mode | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          3 | \033[3m  |         |       | italic           | echo -e "\033[3m####\033[m"  |                                      |
|          4 | \033[4m  |         |       | underline        | echo -e "\033[4m####\033[m"  |                                      |
|          5 | \033[5m  |         |       | blink (slow)     | echo -e "\033[3m####\033[m"  |                                      |
|          6 | \033[6m  |         |       | blink (fast)     | ?                            | not wildly support                   |
|          7 | \003[7m  |         |       | reverse          | echo -e "\033[7m####\033[m"  | it affects the background/foreground |
|          8 | \033[8m  |         |       | hide             | echo -e "\033[8m####\033[m"  | it affects the background/foreground |
|          9 | \033[9m  |         |       | cross            | echo -e "\033[9m####\033[m"  |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| foreground | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         30 | \033[30m |         |       | black            | echo -e "\033[30m####\033[m" |                                      |
|         31 | \033[31m |         |       | red              | echo -e "\033[31m####\033[m" |                                      |
|         32 | \033[32m |         |       | green            | echo -e "\033[32m####\033[m" |                                      |
|         33 | \033[33m |         |       | yellow           | echo -e "\033[33m####\033[m" |                                      |
|         34 | \033[34m |         |       | blue             | echo -e "\033[34m####\033[m" |                                      |
|         35 | \033[35m |         |       | purple           | echo -e "\033[35m####\033[m" | real name: magenta = reddish-purple  |
|         36 | \033[36m |         |       | cyan             | echo -e "\033[36m####\033[m" |                                      |
|         37 | \033[37m |         |       | white            | echo -e "\033[37m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         38 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| background | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         40 | \033[40m |         |       | black            | echo -e "\033[40m####\033[m" |                                      |
|         41 | \033[41m |         |       | red              | echo -e "\033[41m####\033[m" |                                      |
|         42 | \033[42m |         |       | green            | echo -e "\033[42m####\033[m" |                                      |
|         43 | \033[43m |         |       | yellow           | echo -e "\033[43m####\033[m" |                                      |
|         44 | \033[44m |         |       | blue             | echo -e "\033[44m####\033[m" |                                      |
|         45 | \033[45m |         |       | purple           | echo -e "\033[45m####\033[m" | real name: magenta = reddish-purple  |
|         46 | \033[46m |         |       | cyan             | echo -e "\033[46m####\033[m" |                                      |
|         47 | \033[47m |         |       | white            | echo -e "\033[47m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         48 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |                                                                                       |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|

Наведена нижче таблиця містить підсумок 8-бітної версії кольору ANSI

|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 | \033[38;5 | \x1b[38;5 | \e[38;5 | standard. normal | echo -e '\033[38;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[38;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[38;5;45m####\033[m'  | has no specific pattern |
|    232-255 |           |           |         |                  | echo -e '\033[38;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 |           |           |         | standard. normal | echo -e '\033[48;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[48;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[48;5;45m####\033[m'  |                         |
|    232-255 |           |           |         |                  | echo -e '\033[48;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|

8-бітний швидкий тест:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done

У таблиці нижче наведено короткий підсумок 24-бітної версії кольору ANSI

|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| foreground | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | R = red     | echo -e '\033[38;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | G = green   | echo -e '\033[38;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | B = blue    | echo -e '\033[38;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| background | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | R = red     | echo -e '\033[48;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | G = green   | echo -e '\033[48;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | B = blue    | echo -e '\033[48;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|

кілька знімків екрана

8-розрядний підсумок переднього плану в .gif

foreground.gif

тло 8-бітний підсумок у .gif

background.gif

кольоровий підсумок з їх значеннями

введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення

blinking на KDE-терміналі

Мигання KDE

простий Cкод, який показує вам більше

cecho_screenshot

більш досконалий інструмент, який я розробив для боротьби з цими кольорами:

лайн


знімок кольорового режиму

в’янути нормально-яскраво

текстовий режим знятий

лише текстовий режим

поєднання нормально

поєднувати

більше пострілів


Поради та рекомендації для досвідчених користувачів та програмістів:

Чи можемо ми використовувати ці коди мовою програмування?

Так, ти можеш. Я пережив в, , , ,

Вони сповільнюють швидкість програми?

Я думаю, НІ.

Чи можемо ми використовувати їх у Windows?

3/4-бітний Так, якщо ви компілюєте код з gcc
деякими знімками екрана на Win-7

Як обчислити довжину коду?

\033[ = 2, інші частини 1

Де ми можемо використовувати ці коди?

Скрізь, де є ttyперекладач
xterm, gnome-terminal, kde-terminal, mysql-client-CLIі так далі.
Наприклад, якщо ви хочете розфарбувати свій результат за допомогою mysql, який ви можете використовуватиPerl

#!/usr/bin/perl -n
print "\033[1m\033[31m$1\033[36m$2\033[32m$3\033[33m$4\033[m" while /([|+-]+)|([0-9]+)|([a-zA-Z_]+)|([^\w])/g;

збережіть цей код у назві файлу: pcc(= Perl Colorize символу), а потім поставте файл у дійсний, PATHа потім використовуйте його в будь-якому місці.

ls | pcc
df | pcc

в mysqlпершому регістрі його pagerі потім спробувати:

[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;

шт

Він НЕ обробляє Unicode.

Ці коди лише забарвлюються?

Ні, вони можуть зробити багато цікавого. Спробуйте:

echo -e '\033[2K'  # clear the screen and do not move the position

або:

echo -e '\033[2J\033[u' # clear the screen and reset the position

Є багато початківців, які хочуть очистити екран, system( "clear" )щоб ви могли використовувати це замість system(3)дзвінка

Чи доступні вони в Unicode?

Так. \u001b

Який варіант цих кольорів кращий?

Він простий у використанні 3/4-bit, але набагато точний і красивий у використанні 24-bit.
Якщо у вас немає досвіду зтому ось короткий підручник:
24 біти означає: 00000000і 00000000і 00000000. Кожен 8-розрядний для конкретного кольору.
1..8для і 9..16для і 17..24для
So в #FF0000засоби і ось воно: 255;0;0
в #00FF00означає, що тут є: 0;255;0
Це має сенс? якого кольору ви хочете поєднати з цими трьома 8-бітовими значеннями.


довідка:
Wikipedia
ANSI послідовності втечі
tldp.org
tldp.org
misc.flogisoft.com
деякі блоги / веб-сторінки, які я не пам'ятаю


69
Хіба ще ніхто не по-справжньому вражений цією відповіддю ??
Benj

14
Це, безумовно, зал слави, дякую.
ForeverZer0

2
@NeilGuyLindberg немає восьмеричних літералів, ця помилка є частиною Node.js, а не самої списки. ви можете використовувати x1B[для його усунення.
Шакіба Моширі

5
Я прокрутив назад досить далеко, щоб підтвердити цю відповідь!
РНК

1
Схоже, @ShakibaMoshiri написав дисертацію на цю тему xD Жарти окремо, вітаємо за таку детальну відповідь!
SH '

189

Використовувати tputз setafможливостями та параметром 1.

echo "$(tput setaf 1)Hello, world$(tput sgr0)"

8
Це має бути найкращим варіантом. що tput робить, це прочитає інформацію про термінал і видасть правильно вибраний код ANSI для вас. подібний код \033[31mпорушує бібліотеку зчитування рядків у деяких терміналах.
Тянь Чен

44
Вивчіть кольори за допомогою простої петлі (збільшити iверхню межу на більше відтінків):for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
msanford

2
Ось HOWTO щодо кодів tput
maxywb

tput: command not found(на альпійському)
dgallant

127
echo -e "\033[31m Hello World"

[31mКонтролює колір тексту:

  • 30- 37встановлює колір переднього плану
  • 40- 47встановлює колір тла

Більш повний список кольорових кодів можна знайти тут .

Доброю практикою є відновлення кольору тексту \033[0mв кінці рядка.


2
echo -e "\ 033 [31m Hello World", [31m є кольором
неофіційний

36

Я щойно об'єднав хороший улов у всіх рішеннях і закінчив:

cecho(){
    RED="\033[0;31m"
    GREEN="\033[0;32m"
    YELLOW="\033[1;33m"
    # ... ADD MORE COLORS
    NC="\033[0m" # No Color

    printf "${!1}${2} ${NC}\n"
}

І ви можете просто назвати це:

cecho "RED" "Helloworld"

1
Дуже практично, мені просто довелося замінити одинарні лапки на подвійні лапки для GREEN, YELLOW, NC, щоб це працювало в моєму сценарії.
ionescu77

1
Чудове рішення !!
Девід Каріукі

31

Це кольоровий перемикач \033[ . Побачити історію .

Коди кольорів такі як 1;32(Світло-зелений), 0;34(Синій), 1;34(Світло-синій) тощо.

Ми припиняємо кольорові послідовності за допомогою перемикача кольорів \033[і 0m, без кольорового коду. Так само, як відкривання та закриття вкладок мовою розмітки.

  SWITCH="\033["
  NORMAL="${SWITCH}0m"
  YELLOW="${SWITCH}1;33m"
  echo "${YELLOW}hello, yellow${NORMAL}"

Просте echoрішення кольорових функцій:

cecho() {
  local code="\033["
  case "$1" in
    black  | bk) color="${code}0;30m";;
    red    |  r) color="${code}1;31m";;
    green  |  g) color="${code}1;32m";;
    yellow |  y) color="${code}1;33m";;
    blue   |  b) color="${code}1;34m";;
    purple |  p) color="${code}1;35m";;
    cyan   |  c) color="${code}1;36m";;
    gray   | gr) color="${code}0;37m";;
    *) local text="$1"
  esac
  [ -z "$text" ] && local text="$color$2${code}0m"
  echo "$text"
}

cecho "Normal"
cecho y "Yellow!"

1
Я змінив би останню textзмінну text="$color${@: 2}${code}0m"таким чином, щоб весь рядок, крім параметра кольору, був кольоровим.
Шайрон Толедо

@tomazahlin просто додає -е до відлуння, як уже кілька разів згадувалося вище
Артем Медведєв

28

Акуратний спосіб змінити колір лише для одного echo- це визначити таку функцію:

function coloredEcho(){
    local exp=$1;
    local color=$2;
    if ! [[ $color =~ '^[0-9]$' ]] ; then
       case $(echo $color | tr '[:upper:]' '[:lower:]') in
        black) color=0 ;;
        red) color=1 ;;
        green) color=2 ;;
        yellow) color=3 ;;
        blue) color=4 ;;
        magenta) color=5 ;;
        cyan) color=6 ;;
        white|*) color=7 ;; # white or invalid color
       esac
    fi
    tput setaf $color;
    echo $exp;
    tput sgr0;
}

Використання:

coloredEcho "This text is green" green

Або ви можете безпосередньо використовувати кольори кольорів, згадані у відповіді Дрю :

coloredEcho "This text is green" 2

Якщо ви додасте -nехо, то ви можете використовувати його як вбудоване забарвленняecho "Red `coloredEcho "fox" red` jumps over the lazy dog"
sobi3ch

23

Використовуйте tputдля обчислення кольорових кодів. Уникайте використання коду аварійного відключення ANSI (наприклад, \E[31;1mдля червоного кольору), оскільки він менш портативний. Наприклад, Bash в OS X не підтримує його.

BLACK=`tput setaf 0`
RED=`tput setaf 1`
GREEN=`tput setaf 2`
YELLOW=`tput setaf 3`
BLUE=`tput setaf 4`
MAGENTA=`tput setaf 5`
CYAN=`tput setaf 6`
WHITE=`tput setaf 7`

BOLD=`tput bold`
RESET=`tput sgr0`

echo -e "hello ${RED}some red text${RESET} world"

18

На це запитання відповідали знову і знову :-), але чому б ні.

Перше використання tputє більш портативним в сучасних умовах, ніж вручну вводити ASCII-коди вручнуecho -E

Ось швидка функція bash:

 say() {
     echo "$@" | sed \
             -e "s/\(\(@\(red\|green\|yellow\|blue\|magenta\|cyan\|white\|reset\|b\|u\)\)\+\)[[]\{2\}\(.*\)[]]\{2\}/\1\4@reset/g" \
             -e "s/@red/$(tput setaf 1)/g" \
             -e "s/@green/$(tput setaf 2)/g" \
             -e "s/@yellow/$(tput setaf 3)/g" \
             -e "s/@blue/$(tput setaf 4)/g" \
             -e "s/@magenta/$(tput setaf 5)/g" \
             -e "s/@cyan/$(tput setaf 6)/g" \
             -e "s/@white/$(tput setaf 7)/g" \
             -e "s/@reset/$(tput sgr0)/g" \
             -e "s/@b/$(tput bold)/g" \
             -e "s/@u/$(tput sgr 0 1)/g"
  }

Тепер ви можете використовувати:

 say @b@green[[Success]] 

отримати:

Сміливий-зелений успіх

Примітки щодо портативності tput

Перший tput(1)вихідний код був завантажений у вересні 1986 року

tput(1) був доступний у X / Open curses семантиці в 1990-х (стандарт 1997 має семантику, згадану нижче).

Отже, це ( цілком ) всюдисуще.


Це досить круто! Не знав цього. Ви можете сказати щось про наявність tput? Чи доступний він на більшості серверів, де не має прав адміністратора для його встановлення? Чи є у вас посилання на те, де цю техніку вперше було «винайдено»?
Редсандро

3
tput - це стандарт, відповідний стандартам, коли це абсолютно незалежно від того, що ви знаєте можливості терміналу. Якщо термінал не підтримує задану можливість, він виграшно знизиться до всього, що може зробити, не висуваючи гнучкі коди евакуації.
Ахмед Масуд

1
Я перестав використовувати цей метод, оскільки він змішується з курсором у рядках bash. Він випадковим чином завернеться до кінця рядка і не повернеться до початку рядка при використанні додому чи клавіш зі стрілками. Повернення до незграбних ручних кодів втечі вирішує цю проблему.
Редсандро

2
@Resandro - це тому, що ти використовуєш його $PS1без \[...\]навколо нерозбіжних частин? Продовжуйте використовувати маркери Bash PS1 з рядками tput.
Toby Speight

Зауважте, що ця функція не працює повністю на MacOsX через відмінності в утиліті sed: unix.stackexchange.com/questions/13711/…
Jeff

14

Дякую @ k-Five за цю відповідь

declare -A colors
#curl www.bunlongheng.com/code/colors.png

# Reset
colors[Color_Off]='\033[0m'       # Text Reset

# Regular Colors
colors[Black]='\033[0;30m'        # Black
colors[Red]='\033[0;31m'          # Red
colors[Green]='\033[0;32m'        # Green
colors[Yellow]='\033[0;33m'       # Yellow
colors[Blue]='\033[0;34m'         # Blue
colors[Purple]='\033[0;35m'       # Purple
colors[Cyan]='\033[0;36m'         # Cyan
colors[White]='\033[0;37m'        # White

# Bold
colors[BBlack]='\033[1;30m'       # Black
colors[BRed]='\033[1;31m'         # Red
colors[BGreen]='\033[1;32m'       # Green
colors[BYellow]='\033[1;33m'      # Yellow
colors[BBlue]='\033[1;34m'        # Blue
colors[BPurple]='\033[1;35m'      # Purple
colors[BCyan]='\033[1;36m'        # Cyan
colors[BWhite]='\033[1;37m'       # White

# Underline
colors[UBlack]='\033[4;30m'       # Black
colors[URed]='\033[4;31m'         # Red
colors[UGreen]='\033[4;32m'       # Green
colors[UYellow]='\033[4;33m'      # Yellow
colors[UBlue]='\033[4;34m'        # Blue
colors[UPurple]='\033[4;35m'      # Purple
colors[UCyan]='\033[4;36m'        # Cyan
colors[UWhite]='\033[4;37m'       # White

# Background
colors[On_Black]='\033[40m'       # Black
colors[On_Red]='\033[41m'         # Red
colors[On_Green]='\033[42m'       # Green
colors[On_Yellow]='\033[43m'      # Yellow
colors[On_Blue]='\033[44m'        # Blue
colors[On_Purple]='\033[45m'      # Purple
colors[On_Cyan]='\033[46m'        # Cyan
colors[On_White]='\033[47m'       # White

# High Intensity
colors[IBlack]='\033[0;90m'       # Black
colors[IRed]='\033[0;91m'         # Red
colors[IGreen]='\033[0;92m'       # Green
colors[IYellow]='\033[0;93m'      # Yellow
colors[IBlue]='\033[0;94m'        # Blue
colors[IPurple]='\033[0;95m'      # Purple
colors[ICyan]='\033[0;96m'        # Cyan
colors[IWhite]='\033[0;97m'       # White

# Bold High Intensity
colors[BIBlack]='\033[1;90m'      # Black
colors[BIRed]='\033[1;91m'        # Red
colors[BIGreen]='\033[1;92m'      # Green
colors[BIYellow]='\033[1;93m'     # Yellow
colors[BIBlue]='\033[1;94m'       # Blue
colors[BIPurple]='\033[1;95m'     # Purple
colors[BICyan]='\033[1;96m'       # Cyan
colors[BIWhite]='\033[1;97m'      # White

# High Intensity backgrounds
colors[On_IBlack]='\033[0;100m'   # Black
colors[On_IRed]='\033[0;101m'     # Red
colors[On_IGreen]='\033[0;102m'   # Green
colors[On_IYellow]='\033[0;103m'  # Yellow
colors[On_IBlue]='\033[0;104m'    # Blue
colors[On_IPurple]='\033[0;105m'  # Purple
colors[On_ICyan]='\033[0;106m'    # Cyan
colors[On_IWhite]='\033[0;107m'   # White


color=${colors[$input_color]}
white=${colors[White]}
# echo $white



for i in "${!colors[@]}"
do
  echo -e "$i = ${colors[$i]}I love you$white"
done

Результат

введіть тут опис зображення

Сподіваюся, що це зображення допоможе вам вибрати колір для вашого баш: D


14

Якщо ви використовуєте zshабоbash

black() {
    echo -e "\e[30m${1}\e[0m"
}

red() {
    echo -e "\e[31m${1}\e[0m"
}

green() {
    echo -e "\e[32m${1}\e[0m"
}

yellow() {
    echo -e "\e[33m${1}\e[0m"
}

blue() {
    echo -e "\e[34m${1}\e[0m"
}

magenta() {
    echo -e "\e[35m${1}\e[0m"
}

cyan() {
    echo -e "\e[36m${1}\e[0m"
}

gray() {
    echo -e "\e[90m${1}\e[0m"
}

black 'BLACK'
red 'RED'
green 'GREEN'
yellow 'YELLOW'
blue 'BLUE'
magenta 'MAGENTA'
cyan 'CYAN'
gray 'GRAY'

Спробуйте в Інтернеті


14

Ми можемо використовувати 24 біти справжніх кольорів RGB як для тексту, так і для фону!

 ESC[38;2;⟨r⟩;⟨g⟩;⟨bm  /*Foreground color*/
 ESC[48;2;⟨r⟩;⟨g⟩;⟨bm  /*Background color*/

Приклад червоного тексту та тега закриття:

 echo -e "\e[38;2;255;0;0mHello world\e[0m"

Генератор:

24-розрядні: оскільки графічні картки "справжнього кольору" з 16-24 бітними кольорами стали загальними, Xterm, KDE's Konsole, а також усі термінали на базі libvte (включаючи термінал GNOME) підтримують 24-бітне переднє передбачуване та фонове налаштування кольору https: / /en.wikipedia.org/wiki/ANSI_escape_code#24-bit

Чи безпечно це використовувати в моїх сценаріях?

Так! 8 та 16 бітові клеми просто відображатимуть як запасний колір у діапазоні доступної палітри, зберігаючи найкращий контраст, без поломки!


Крім того, ніхто не помітив корисність переверненого відео ANSI з кодом 7 .

Він може бути читабельним на будь-яких термінальних схемах кольорів, чорного або білого тла або інших палітр вигадок, поміняючи кольори переднього плану та фону.

Наприклад, для червоного тла, який працює скрізь:

echo -e "\033[31;7mHello world\e[0m";

Ось як це виглядає при зміні вбудованих схем терміналу:

введіть тут опис зображення

Це сценарій циклу, який використовується для gif.

for i in {30..49};do echo -e "\033[$i;7mReversed color code $i\e[0m Hello world!";done

Дивіться https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters


11

Ці коди працюють на моєму полі Ubuntu:

введіть тут опис зображення

echo -e "\x1B[31m foobar \x1B[0m"
echo -e "\x1B[32m foobar \x1B[0m"
echo -e "\x1B[96m foobar \x1B[0m"
echo -e "\x1B[01;96m foobar \x1B[0m"
echo -e "\x1B[01;95m foobar \x1B[0m"
echo -e "\x1B[01;94m foobar \x1B[0m"
echo -e "\x1B[01;93m foobar \x1B[0m"
echo -e "\x1B[01;91m foobar \x1B[0m"
echo -e "\x1B[01;90m foobar \x1B[0m"
echo -e "\x1B[01;89m foobar \x1B[0m"
echo -e "\x1B[01;36m foobar \x1B[0m"

Це друкує літери abcd всіма різними кольорами:

echo -e "\x1B[0;93m a \x1B[0m b \x1B[0;92m c \x1B[0;93m d \x1B[0;94m"

Для циклу:

for (( i = 0; i < 17; i++ )); 
do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; 
done

введіть тут опис зображення


2
До речі: це не дуже залежить від того, щоб встановити конкретну версію ubuntu, але використовувати PuTTY!
урзеїт

11

Я знайшов дивовижну відповідь Шакіби Мошірі , коли я шукав інформацію на цю тему ... тоді у мене з’явилася ідея ... і це виявилося в дуже приємній функції, надзвичайно простої у використанні 😁
Тож я мушу поділитися нею 😉

https://github.com/ppo/bash-colors

Використання: $(c <flags>) всередині echo -eабоprintf

 ┌───────┬─────────────────┬──────────┐   ┌───────┬─────────────────┬──────────┐
  Code   Style            Octal        Code   Style            Octal    
 ├───────┼─────────────────┼──────────┤   ├───────┼─────────────────┼──────────┤
    -    Foreground       \033[3..       B    Bold             \033[1m  
    _    Background       \033[4..       U    Underline        \033[4m  
 ├───────┼─────────────────┼──────────┤      F    Flash/blink      \033[5m  
    k    Black            ......0m       N    Negative         \033[7m  
    r    Red              ......1m    ├───────┼─────────────────┼──────────┤
    g    Green            ......2m       L    Normal (unbold)  \033[22m 
    y    Yellow           ......3m       0    Reset            \033[0m  
    b    Blue             ......4m    └───────┴─────────────────┴──────────┘
    m    Magenta          ......5m 
    c    Cyan             ......6m 
    w    White            ......7m 
 └───────┴─────────────────┴──────────┘

Приклади:

echo -e "$(c 0wB)Bold white$(c) and normal"
echo -e "Normal text… $(c r_yB)BOLD red text on yellow background… $(c _w)now on
  white background… $(c 0U) reset and underline… $(c) and back to normal."

10

Для читабельності

Якщо ви хочете покращити читабельність коду, echoспочатку можете ввести рядок, а потім додати колір пізніше, використовуючи sed:

echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/' 

1
Мені дуже подобається ця відповідь! Чи можете ви пояснити, будь ласка, $ у команді sed?
Патрік

2
$ "<Щось>" призначений для bash, а не sed. Він підказує bash обробляти \ e як послідовність евакуації та вводити символ "escape". Зазвичай ви бачите простіші форми, такі як $ '\ t' або $ '\ n', щоб отримати символ табуляції чи нової лінії, переданий на командування.
dsz

8

Моя улюблена відповідь поки що - кольоровий ехо.

Просто, щоб опублікувати інший варіант, ви можете перевірити цей маленький інструмент xcol

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

ви використовуєте його так само, як grep, і він забарвить його stdin іншим кольором для кожного аргументу, наприклад

sudo netstat -putan | xcol httpd sshd dnsmasq pulseaudio conky tor Telegram firefox "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" ":[[:digit:]]+" "tcp." "udp." LISTEN ESTABLISHED TIME_WAIT

Приклад xcol

Зауважте, що він приймає будь-який регулярний вираз, який sed прийме.

Цей інструмент використовує наступні визначення

#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}"

6

Щоб розширити цю відповідь , для лінивих:

function echocolor() { # $1 = string
    COLOR='\033[1;33m'
    NC='\033[0m'
    printf "${COLOR}$1${NC}\n"
}

echo "This won't be colored"
echocolor "This will be colorful"

2
Не ухиляйтесь від терміналу. Використання tput; ось для чого!
Toby Speight

@TobySpeight Хоча це може бути правдою для багатоплатформної підтримки (теоретично), якщо плакат вважає, що це працює у їхньому власному світі, то чому б не погоджуватись та відмовляти інших у подібному світі використовувати техніку? Справа в суті я намагаюся подібне в Ubuntu 16.04 bash, і це працює. Як єдиний користувач на цій платформі, я вважаю цю відповідь прийнятною. Я також буду використовувати tputдля scі rcхоч (зберегти курсор, відновити курсор). Хоча ця відповідь називає мене "ледачим", це можна переробити як "практичне" або "прямо до суті".
WinEunuuchs2Unix

Моє власне рішення було подібне до цього, обмежувалося виключно вбудованими оболонками, тому що роздвоєння двох зовнішніх процесів, підрозділів тощо для кожного повідомлення в сценарії просто мало ... неприємний запах.
Аміт Найду

6

щоб показати вихідний текст із різним кольором, ви можете зробити:

echo -e "\033[31;1mYour Message\033[0m"

-Темний 0; 30 темно-сірий 1; 30

-Кривий 0; 31 Світло-червоний 1; 31

-Зелений 0; 32 Світло-зелений 1; 32

-Рубний / оранжевий 0; 33 жовтий 1; 33

-Світло 0; 34 Світло-синій 1; 34

-Фіолетовий 0; 35 Світло-фіолетовий 1; 35

-Cyan 0; 36 Світло-блакитний 1; 36

-Світло-сірий 0; 37 Білий 1; 37


5

Ви обов'язково повинні використовувати tput для необроблених послідовностей управління ANSI.

Оскільки існує велика кількість різних мов управління терміналами, зазвичай система має проміжний рівень зв'язку. Реальні коди шукаються в базі даних для виявленого в даний час терміналу, і ви даєте стандартизовані запити в API або (з оболонки) в команду.

Однією з таких команд є tput. tputприймає набір абревіатур, що називаються іменами можливостей та будь-якими параметрами, якщо це доречно, потім шукає правильні послідовності виходу для виявленого терміналу в базі даних terminfo та друкує правильні коди (термін, сподіваємось, розуміє).

з http://wiki.bash-hackers.org/scripting/terminalcodes

З цього приводу я написав невелику бібліотеку помічників під назвою bash-tint , яка додає ще один шар поверх tput, що робить його ще простішим у використанні (imho):

Приклад: tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."

Дав би такий результат: введіть тут опис зображення


5

Я замість жорсткого кодування кодів втечі, який є специфічним для вашого поточного терміналу, ви повинні використовувати tput.

Це мій улюблений демо-сценарій:

#!/bin/bash

tput init

end=$(( $(tput colors)-1 ))
w=8
for c in $(seq 0 $end); do
    eval "$(printf "tput setaf %3s   " "$c")"; echo -n "$_"
    [[ $c -ge $(( w*2 )) ]] && offset=2 || offset=0
    [[ $(((c+offset) % (w-offset))) -eq $(((w-offset)-1)) ]] && echo
done

tput init

256 кольорів виводиться по tput


4

Я використовую це для кольорового друку

#!/bin/bash
#--------------------------------------------------------------------+
#Color picker, usage: printf $BLD$CUR$RED$BBLU'Hello World!'$DEF     |
#-------------------------+--------------------------------+---------+
#       Text color        |       Background color         |         |
#-----------+-------------+--------------+-----------------+         |
# Base color|Lighter shade| Base color   | Lighter shade   |         |
#-----------+-------------+--------------+-----------------+         |
BLK='\e[30m'; blk='\e[90m'; BBLK='\e[40m'; bblk='\e[100m' #| Black   |
RED='\e[31m'; red='\e[91m'; BRED='\e[41m'; bred='\e[101m' #| Red     |
GRN='\e[32m'; grn='\e[92m'; BGRN='\e[42m'; bgrn='\e[102m' #| Green   |
YLW='\e[33m'; ylw='\e[93m'; BYLW='\e[43m'; bylw='\e[103m' #| Yellow  |
BLU='\e[34m'; blu='\e[94m'; BBLU='\e[44m'; bblu='\e[104m' #| Blue    |
MGN='\e[35m'; mgn='\e[95m'; BMGN='\e[45m'; bmgn='\e[105m' #| Magenta |
CYN='\e[36m'; cyn='\e[96m'; BCYN='\e[46m'; bcyn='\e[106m' #| Cyan    |
WHT='\e[37m'; wht='\e[97m'; BWHT='\e[47m'; bwht='\e[107m' #| White   |
#-------------------------{ Effects }----------------------+---------+
DEF='\e[0m'   #Default color and effects                             |
BLD='\e[1m'   #Bold\brighter                                         |
DIM='\e[2m'   #Dim\darker                                            |
CUR='\e[3m'   #Italic font                                           |
UND='\e[4m'   #Underline                                             |
INV='\e[7m'   #Inverted                                              |
COF='\e[?25l' #Cursor Off                                            |
CON='\e[?25h' #Cursor On                                             |
#------------------------{ Functions }-------------------------------+
# Text positioning, usage: XY 10 10 'Hello World!'                   |
XY () { printf "\e[$2;${1}H$3"; }                                   #|
# Print line, usage: line - 10 | line -= 20 | line 'Hello World!' 20 |
line () { printf -v _L %$2s; printf -- "${_L// /$1}"; }             #|
# Create sequence like {0..(X-1)}                                    |
que () { printf -v _N %$1s; _N=(${_N// / 1}); printf "${!_N[*]}"; } #|
#--------------------------------------------------------------------+

Усі основні кольори встановлені як різноманітні, а також є деякі корисні функції: XY, лінія та черга. Отримайте джерело цього сценарію в одному з ваших і використовуйте всі кольорові параметри та функції.


3

І це те, що я використовував, щоб побачити всі комбінації та вирішити, що читає круто:

for (( i = 0; i < 8; i++ )); do
    for (( j = 0; j < 8; j++ )); do
        printf "$(tput setab $i)$(tput setaf $j)(b=$i, f=$j)$(tput sgr0)\n"
    done
done

2

Я написав свог, щоб досягти саме цього.

Можна просто зробити

pip install swag

Тепер ви можете встановити всі команди втечі як файли txt до заданого пункту через:

swag install -d <colorsdir>

Або ще простіше через:

swag install

На які будуть встановлені кольори ~/.colors.

Або ви використовуєте їх так:

echo $(cat ~/.colors/blue.txt) This will be blue

Або таким чином, який мені здається цікавішим:

swag print -c red -t underline "I will turn red and be underlined"

Перевірте це на asciinema !


0

Ось простий маленький сценарій, який я нещодавно зібрав разом, який забарвить будь-який трубопровід, а не використовувати "Туалет".

File: color.bsh

#!/usr/bin/env bash 

## A.M.Danischewski 2015+(c) Free - for (all (uses and 
## modifications)) - except you must keep this notice intact. 

declare INPUT_TXT=""
declare    ADD_LF="\n" 
declare -i DONE=0
declare -r COLOR_NUMBER="${1:-247}"
declare -r ASCII_FG="\\033[38;05;"
declare -r COLOR_OUT="${ASCII_FG}${COLOR_NUMBER}m"

function show_colors() { 
   ## perhaps will add bg 48 to first loop eventually 
 for fgbg in 38; do for color in {0..256} ; do 
 echo -en "\\033[${fgbg};5;${color}m ${color}\t\\033[0m"; 
 (($((${color}+1))%10==0)) && echo; done; echo; done
} 

if [[ ! $# -eq 1 || ${1} =~ ^-. ]]; then 
  show_colors 
  echo " Usage: ${0##*/} <color fg>" 
  echo "  E.g. echo \"Hello world!\" | figlet | ${0##*/} 54" 
else  
 while IFS= read -r PIPED_INPUT || { DONE=1; ADD_LF=""; }; do 
  PIPED_INPUT=$(sed 's#\\#\\\\#g' <<< "${PIPED_INPUT}")
  INPUT_TXT="${INPUT_TXT}${PIPED_INPUT}${ADD_LF}"
  ((${DONE})) && break; 
 done
 echo -en "${COLOR_OUT}${INPUT_TXT}\\033[00m"
fi 

Потім назвіть його червоним кольором (196):
$> echo "text you want colored red" | color.bsh 196


Логіка кольорового циклу була знайдена в цьому гідному навчальному посібнику Ascii: misc.flogisoft.com/bash/tip_colors_and_formatting

-1

Звертатися до:

echo_red(){
    echo -e "\e[1;31m$1\e[0m"
}
echo_green(){
    echo -e "\e[1;32m$1\e[0m"
}
echo_yellow(){
    echo -e "\e[1;33m$1\e[0m"
}
echo_blue(){
    echo -e "\e[1;34m$1\e[0m"
}

Зауважте, що функція echo_green повинна мати код 32, а не 33. Неможливо редагувати b / c stackoverflow потрібно щонайменше 6 символьних редагувань.
Даніель

-2

Ось найпростіше і читабельне рішення. За допомогою bashj ( https://sourceforge.net/projects/bashj/ ) ви просто виберете один із цих рядків:

#!/usr/bin/bash

W="Hello world!"
echo $W

R=130
G=60
B=190

echo u.colored($R,$G,$B,$W)

echo u.colored(255,127,0,$W)
echo u.red($W)
echo u.bold($W)
echo u.italic($W)

Y=u.yellow($W)
echo $Y
echo u.bold($Y)

256x256x256 кольори доступні, якщо у вас є підтримка кольорів у вашій термінальній програмі.


-3

після змішування інших рішень з потоку ось як мені вдалося отримати кольори у npm scriptsвиході (gitbash CLI):

{
    "deploy": "echo \u001b[1;32m && ng build && echo \u001b[1;0mdeploy {\u001b[1;33mcopy\u001b[1;0m: \u001b[1;32m0% && cp -r -f dist/packaged/* \\\\SERVER-01\\dist\\ && echo \u001b[1;0mdeploy {\u001b[1;33mcopy\u001b[1;0m} \u001b[1;34m\u001b[1;1m100% DEPLOYED"
}

введіть тут опис зображення


-4

Так само, як щось там небагато, передаючи його через греп, виділить його як червоний (але тільки червоний). Ви також можете використовувати названі труби, щоб ваш рядок був ближче до кінця рядка:

 grep '.*' --color=always <(echo "foobar")

вам не вистачає можливості вибрати колір, який ви обрали. також греп як утиліта для фарбування справді сумнівна: P
Ахмед Масуд

Не дуже, ОП спеціально згадали, що хочуть червоного кольору. Я погоджуюся, що є кращі варіанти, ніж використання grep, але це дозволяє досягти того, про що вони попросили, і заощаджує, навчившись щось складніше.
FinalDuty

-5
red='\e[0;31m'
NC='\e[0m' # No Color
echo -e "${red}Hello Stackoverflow${NC}"

Ця відповідь правильна, за винятком того, що заклик до кольорів не повинен знаходитися всередині лапок.

echo -e ${red}"Hello Stackoverflow"${NC}

Слід зробити трюк.


3
Добре працює всередині цитат. перемикач -e також оцінює те, що в котируваннях. Запуск обох (внутрішніх і зовнішніх лапок) за допомогою bash -x виводить одну і ту ж виконану команду echo -e '\e[0;31mHello Stackoverflow\e[0m'. Так що це точно так само і для Баша.
naab
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.