Я пытаюсь напечатать текст в терминале с помощью команды echo.
Я хочу напечатать текст красного цвета. Как я могу это сделать?
Вы можете использовать эти коды выхода 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, если вы не хотите добавлять дополнительную пустую строку)
\e[0;31mHello Stackoverflow\e[0m
echo
чтобы включить экранирование обратной косой черты.
Вы можете использовать команду awesome tput
(предложенную в Ответ Ignacio) для создания управляющих кодов терминала для всех видов вещей.
Конкретные подкоманды 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
Существуют также версии функций настройки цвета (не t214 > вместо setab
и setf
вместо setaf
), но не ANSI), которые не указаны здесь.
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 default
tput bel # Play a bell
С помощью compiz wobbly windows команда 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.)$()
- это замена команды . Все, что делает tput af 1
, - это генерирует строку цветового кода, но коды не являются печатными символами, поэтому ввод только tput af 1
приведет к пустой строке вывода.
ncurses
# 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
[IMG_OUR_ID=3851.svg?sanitize=true]
| | 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
вы должны добавить дополнительные escape-символы, чтобы bash мог их правильно интерпретировать. Без этого добавления лишних символов персонажей он работает, но вы столкнетесь с проблемами, когда используете Ctrl + r
для поиска в своей истории.
Вы должны добавить \[
до запуска кода 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\]
Прежде чем погрузиться в эти цвета, вы должны знать о четырех режимах с этими кодами:
Он изменяет стиль цвета NOT text. Например, сделайте цвет ярким или темным.
0
сброс1;
легче обычного2;
темнее, чем обычноЭтот режим не поддерживается широко. Он полностью поддерживает Gnome-Terminal.
Этот режим предназначен для изменения стиля текста NOT color.
3;
курсивный4;
подчеркивание5;
мигает (медленно)6;
мигает (быстро)7;
задний ход8;
скрывать9;
кросс-аут и почти поддерживаются.
Например, KDE-Konsole поддерживает 5;
но Gnome-Terminal не поддерживает и Gnome поддерживает 8;
но KDE этого не делает.
Этот режим предназначен для раскрашивания переднего плана.
Этот режим предназначен для раскрашивания фона.
[IMG_OUR_ID=3851.svg?sanitize=true]
В приведенной ниже таблице приведена сводка 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[32m | | | yellow | echo -e "\033[33m####\033[m" | |
| 34 | \033[32m | | | blue | echo -e "\033[34m####\033[m" | |
| 35 | \033[32m | | | purple | echo -e "\033[35m####\033[m" | real name: magenta = reddish-purple |
| 36 | \033[32m | | | cyan | echo -e "\033[36m####\033[m" | |
| 37 | \033[32m | | | 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 | |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
[IMG_OUR_ID=3851.svg?sanitize=true]
В приведенной ниже таблице приведена сводка 8-разрядной версии ANSI-color
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| 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
[IMG_OUR_ID=3851.svg?sanitize=true]
В приведенной ниже таблице приведена сводка 24-битной версии ANSI-color
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| 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 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
[IMG_OUR_ID=3851.svg?sanitize=true]
8-битное резюме переднего плана в формате .gif
фоновая 8-битная сводка в .gif
blinking
на KDE-терминале
[IMG_OUR_ID=3859.svg?sanitize=true] простой C
код, который показывает вам больше
[IMG_OUR_ID=3861.svg?sanitize=true] более продвинутый инструмент, который я разработал, чтобы справиться с этими цветами:
Да, ты можешь. Я наблюдал в bash, c, c++, d perl, python
Я думаю нет.
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 Character), а затем поместите файл a в действительный PATH
затем используйте его в любом месте.
ls | pcc
df | pcc
внутри mysql
сначала зарегистрируйте его для pager
а затем попробуйте:
[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;
Он НЕ обрабатывает Юникод.
Нет, они могут сделать много интересного. Пытаться:
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)
Да. \u001b
Легко использовать 3/4-bit
, но очень точно и красиво использовать 24-bit
.
Если у вас нет опыта работы с html, значит, это быстрый учебник:
24 бита означают: 00000000
и 00000000
и 00000000
. Каждый 8-бит предназначен для определенного цвета. 24..17
для [IMG_OUR_ID=3867.svg?sanitize=true] и 16..9
для [IMG_OUR_ID=3868.svg?sanitize=true] и 8..1
для [IMG_OUR_ID=3869.svg?sanitize=true]
Таким образом, в html #FF0000
означает [IMG_OUR_ID=3867.svg?sanitize=true], и вот он: 255;0;0
в html #00FF00
означает [IMG_OUR_ID=3868.svg?sanitize=true], который здесь: 0;255;0
Имеет ли это смысл? какой цвет вы хотите объединить с этими тремя 8-битными значениями.
ссылка:
Википедия
Управляющие последовательности ANSI
tldp.org
tldp.org
misc.flogisoft.com
некоторые блоги/веб-страницы, которые я не помню
Используйте tput
с возможностью setaf
и параметром 1
.
echo "$(tput setaf 1)Hello, world$(tput sgr0)"
\033[31m
сломает библиотеку readline в некоторых терминалах.
i
для большего количества оттенков): for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
echo -e "\033[31m Hello World"
[31m
управляет цветом текста:
30
- 37
устанавливает цвет переднего плана.40
- 47
устанавливает цвет фонаБолее полный список цветовых кодов можно найти здесь.
Хорошая практика для reset цвета текста вернуться к \033[0m
в конце строки.
Это переключатель цветов \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!"
text
переменную на text="$color${@: 2}${code}0m"
таким образом, вся строка, за исключением параметра цвета, будет окрашена.
Чистым способом изменения цвета только для одного 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
Или вы можете напрямую использовать цветовые коды, упомянутые в Drew answer:
coloredEcho "This text is green" 2
-n
в echo, вы можете использовать его в качестве встроенной раскраски. echo "Red `coloredEcho "fox" red` jumps over the lazy dog"
Используйте tput
для расчета цветовых кодов. Избегайте использования escape-кода 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"
На этот вопрос ответили снова и снова :-), но почему бы и нет.
Вначале использование 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
? Доступно ли оно на большинстве серверов, на которых нет прав администратора для его установки? У вас есть ссылка на то, где эта техника была впервые «изобретена»?
Благодаря @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
Надеемся, что этот образ поможет вам выбрать цвет для вашего bash: D
Эти коды работают в моем поле 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"
Это печатает буквы a b c d все в разных цветах:
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
Если вы хотите улучшить удобочитаемость кода, вы можете echo
сначала ввести строку, а затем добавить цвет позже, используя sed
:
echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/'
Мой любимый ответ пока цветенEcho.
Чтобы опубликовать еще один вариант, вы можете проверить этот маленький инструмент 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
Обратите внимание, что он принимает любое регулярное выражение, которое будет принимать 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}"
Развернуть на этот ответ, для ленивых нас:
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"
tput
; вот для чего это!
Никто не заметил полезности обратного видео 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
Я только что объединил хорошие уловки во всех решениях и получил:
c_echo(){
RED="\033[0;31m"
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
printf "${!1}${2} ${NC}\n"
}
И вы можете просто назвать это как:
c_echo "RED" "Helloworld"
Вы должны обязательно использовать tput над необработанными контрольными последовательностями ANSI.
Поскольку существует большое количество различных языков управления терминалом, обычно система имеет промежуточный уровень связи. Реальные коды просматриваются в базе данных для текущего типа терминала, и вы даете стандартизованные запросы API или (из оболочки) команде.
Одна из этих команд -
tput
.tput
принимает набор сокращений, называемых именами возможностей и любыми параметрами, если это необходимо, затем просматривает правильные escape-последовательности для обнаруженного терминала в базе данных 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."
Дала бы следующий результат:
Я написал swag, чтобы достичь именно этого.
Вы можете просто сделать
pip install swag
Теперь вы можете установить все команды escape как 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!
И это то, что я использовал, чтобы увидеть всю комбинацию и решить, что читается круто:
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
Вот небольшой маленький script, который я недавно собрал, чтобы раскрасить любой входной канал, вместо использования "Туалет".
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
Так же, как что-то немного, прохождение через grep будет выделять его как красный (но только красный). Вы также можете использовать именованные каналы, чтобы ваша строка ближе к концу строки:
grep '.*' --color=always <(echo "foobar")
Вот простейшее и читаемое решение. С 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
цветов доступны, если у вас есть поддержка цвета в приложении терминала.
red='\e[0;31m'
NC='\e[0m' # No Color
echo -e "${red}Hello Stackoverflow${NC}"
Этот ответ правильный, за исключением того, что вызов цветов не должен находиться внутри кавычек.
echo -e ${red}"Hello Stackoverflow"${NC}
Должен сделать трюк.
echo -e '\e[0;31mHello Stackoverflow\e[0m'
. То же самое относится и к Bash.