Я пытаюсь напечатать текст в терминале с помощью команды echo.
Я хочу напечатать текст красным цветом. Как я могу это сделать?
linux
bash
command-line
echo
terminal-color
satheesh.droid
источник
источник
Ответы:
Вы можете использовать эти коды выхода ANSI :
А затем используйте их в своем сценарии следующим образом:
который печатает
love
красным.Из комментария @ james-lim, если вы используете
echo
команду, обязательно используйте флаг -e, чтобы разрешить обратную косую черту .(не добавляйте
"\n"
при использовании echo, если вы не хотите добавлять дополнительную пустую строку)источник
\e[0;31mHello Stackoverflow\e[0m
echo
чтобы включить экранирование от обратной косой черты.\x1B
вместо\e
.\033
было бы хорошо для всех платформ.for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
Вы можете использовать команду awesome
tput
(предложенную в ответе Игнасио ) для создания управляющих кодов терминала для всех видов вещей.Применение
Конкретные
tput
подкоманды обсуждаются позже.непосредственный
Вызовите
tput
как часть последовательности команд:Используйте
;
вместо&&
так, еслиtput
ошибки текст все еще показывает.Переменные оболочки
Другой вариант - использовать переменные оболочки:
tput
создает последовательности символов, которые интерпретируются терминалом как имеющие особое значение. Они не будут показаны сами. Обратите внимание, что они все еще могут быть сохранены в файлы или обработаны как входные данные программами, отличными от терминала.Подстановка команд
Может быть удобнее вставить
tput
вывод непосредственно в вашиecho
строки, используя подстановку команд :пример
Приведенная выше команда производит это в Ubuntu:
Команды цвета переднего плана и фона
Цвета следующие:
Существуют также не-ANSI версии функций настройки цвета (
setb
вместоsetab
иsetf
вместоsetaf
), которые используют разные числа, не приведенные здесь.Команды текстового режима
Команды перемещения курсора
Очистить и вставить команды
Другие команды
С Compiz шаткого окном , то
bel
команда делает терминал раскачиваться на секунду , чтобы привлечь внимание пользователя.Сценарии
tput
принимает скрипты, содержащие одну команду в строке, которые выполняются по порядку доtput
выхода.Избегайте временных файлов, выводя многострочную строку и передавая ее по конвейеру:
Смотрите также
man 1 tput
man 5 terminfo
полный список команд и более подробную информацию об этих опциях. (Соответствующаяtput
команда указана вCap-name
столбце огромной таблицы, которая начинается в строке 81.)источник
$()
это замена команды . Все, чтоtput af 1
нужно, - это генерировать строку цветового кода, но коды не являются печатными символами, поэтомуtput af 1
один только ввод приведет к пустой строке вывода.ncurses
tput
цветов проверьте этот ответ на Unix StackExchangereset=`tput sgr0`
должно бытьreset=`tput sgr 0`
, с пробелом.некоторые переменные, которые вы можете использовать:
escape-символ в bash , hex и восьмеричном соответственно:
краткий пример:
исключение bash:
Если вы собираетесь использовать эти коды в ваших специальных переменных bash
Вы должны добавить дополнительные escape-символы, чтобы удармогу правильно их интерпретировать. Без добавления дополнительных escape-символов это работает, но вы столкнетесь с проблемами при
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\]
тип цветовой последовательности:
Прежде чем погрузиться в эти цвета, вы должны знать о 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
В таблице ниже приведена сводная информация о 8-битной версии цвета ANSI
8-битный быстрый тест:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done
В таблице ниже приведена сводная информация о 24-битной версии цвета ANSI
несколько скриншотов
передний план 8-битной сводки в
.gif
фоновое 8-битное резюме в
.gif
сводка цветов с их значениями
blinking
на KDE-терминалепростой
C
код, который показывает вам большеболее продвинутый инструмент, который я разработал для работы с этими цветами:
цветная съемка
текстовый режим выстрел
объединение в порядке
больше выстрелов
Советы и рекомендации для опытных пользователей и программистов:
Можем ли мы использовать эти коды на языке программирования?
Да, ты можешь. Я испытал вудар, с, C ++, d Perl, питон
Они замедляют скорость программы?
Я думаю нет.
Можем ли мы использовать их в Windows?
3/4-битный Да, если вы компилируете код с
gcc
некоторыми снимками экрана на Win-7
Как рассчитать длину кода?
\033[
= 2, другие части 1Где мы можем использовать эти коды?
Везде, где есть
tty
переводчикxterm
,gnome-terminal
,kde-terminal
,mysql-client-CLI
и так далее.Например, если вы хотите раскрасить вывод с помощью mysql, вы можете использовать
Perl
сохраните этот код в имени файла:
pcc
(= Perl Colorize Character) и затем поместите файл в действительный, аPATH
затем используйте его где угодно.ls | pcc
df | pcc
в
mysql
первом регистре егоpager
и затем попробовать:Это НЕ обрабатывать Unicode.
Эти коды только раскрашивают?
Нет, они могут сделать много интересного. Пытаться:
или:
Есть много начинающих, которые хотят очистить экран,
system( "clear" )
чтобы вы могли использовать это вместоsystem(3)
вызоваОни доступны в Юникоде?
Да.
\u001b
Какой вариант этих цветов предпочтительнее?
Это простой в использовании
3/4-bit
, но он очень точный и красивый в использовании24-bit
.Если у вас нет опыта работы сHTMLИтак, вот краткое руководство:
24 бита означает:
00000000
и00000000
и00000000
. Каждый 8-бит предназначен для определенного цвета.1..8
для и9..16
для и17..24
длятак вHTML
#FF0000
значит и вот оно:255;0;0
вHTML
#00FF00
означает, что здесь:0;255;0
это имеет смысл? какой цвет вы хотите объединить с этими тремя 8-битными значениями.
ссылка:
Wikipedia
ANSI escape-последовательности
tldp.org
tldp.org
misc.flogisoft.com
некоторые блоги / веб-страницы, которые я не помню
источник
x1B[
для устранения этого.Используйте
tput
сsetaf
возможностью и параметром1
.источник
\033[31m
сломает библиотеку readline в некоторых терминалах.i
верхнюю границу для большего количества оттенков):for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
tput: command not found
(на альпийском)[31m
Контролирует цвет текста:30
-37
устанавливает цвет переднего плана40
-47
устанавливает цвет фонаБолее полный список цветовых кодов можно найти здесь .
Хорошей практикой является сброс цвета текста обратно
\033[0m
в конец строки.источник
Я только что объединил хорошие уловки во всех решениях и получил:
И вы можете просто назвать это как:
источник
Это переключатель цвета
\033[
. Смотрите историю .Цветовые коды :
1;32
(светло-зеленый),0;34
(синий),1;34
(светло-синий) и т. Д.Мы выключили последовательность цветов с переключателем цвета
\033[
и0m
, в не -color код. Так же, как открытие и закрытие вкладок на языке разметки.Простое цветовое
echo
решение:источник
text
переменнуюtext="$color${@: 2}${code}0m"
таким образом, что вся строка, кроме параметра цвета, будет окрашена.tput
поскольку он более переносим - работает в Bash и на macOS. Поэтому я действительно предлагаю использовать функцию Алирезы Мириана из этого ответа: stackoverflow.com/a/23006365/2693875Отличный способ изменить цвет только для одного
echo
- определить такую функцию:Применение:
Или вы можете напрямую использовать цветовые коды, упомянутые в ответе Дрю :
источник
-n
к эхо, то вы можете использовать его как встроенную раскраскуecho "Red `coloredEcho "fox" red` jumps over the lazy dog"
Используйте
tput
для расчета цветовых кодов. Избегайте использования escape-кода ANSI (например,\E[31;1m
для красного), потому что он менее переносим. Bash на OS X, например, не поддерживает его.источник
На этот вопрос отвечали снова и снова :-), но почему бы и нет.
Первое использование
tput
более переносимо в современных условиях, чем ручное введение кодов ASCII черезecho -E
Вот быстрая функция bash:
Теперь вы можете использовать:
получить:
Примечания о переносимости
tput
Первый раз
tput(1)
исходный код был загружен в сентябре 1986 годаtput(1)
была доступна в семантике X / Open curses в 1990-х (стандарт 1997 имеет семантику, упомянутую ниже).Так что это ( довольно ) вездесущий.
источник
tput
? Доступно ли оно на большинстве серверов, на которых нет прав администратора для его установки? У вас есть ссылка на то, где эта техника была впервые «изобретена»?$PS1
без\[...\]
промежутков? Продолжайте использовать маркеры Bash PS1 со строками tput.Спасибо @ k-Five за этот ответ
Результат
Надеюсь, что это изображение поможет вам выбрать цвет для вашей башни: D
источник
Если вы используете
zsh
илиbash
Попробуй онлайн
источник
Мы можем использовать 24-битные RGB-цвета для текста и фона!
Пример красного текста и закрывающего тега:
Генератор:
Показать фрагмент кода
Безопасно ли использовать в моих сценариях?
Да! Терминалы 8 и 16 бит будут просто отображать как запасной цвет в диапазоне доступной палитры, сохраняя лучший контраст, без поломок!
Кроме того, никто не заметил полезности перевернутого видео с кодом ANSI 7 .
Он остается читаемым на любых цветовых схемах терминалов, черном или белом фоне или на других модных палитрах, меняя цвета переднего плана и фона.
Пример для красного фона, который работает везде:
Вот как это выглядит при изменении встроенных схем терминала:
Это скрипт цикла, используемый для GIF.
См. Https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters
источник
Эти коды работают на моей коробке Ubuntu:
Это печатает буквы abcd всех разных цветов:
Для цикла:
источник
Я нашел потрясающий ответ Шакибы Мошири, когда искал информацию по этой теме ... потом у меня появилась идея ... и она оказалась очень приятной функцией, чрезвычайно простой в использовании 😁
Так что я хочу поделиться ею 😉
https://github.com/ppo/bash-colors
Использование:
$(c <flags>)
внутриecho -e
илиprintf
Примеры:
источник
Для удобства чтения
Если вы хотите улучшить читабельность кода, вы можете
echo
сначала добавить строку, а затем добавить цвет, используяsed
:источник
Мой любимый ответ до сих пор цветной Echo.
Просто чтобы опубликовать другой вариант, вы можете проверить этот маленький инструмент xcol
https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/
вы используете его так же, как grep, и он будет окрашивать свой стандартный цвет, например, для каждого аргумента
Обратите внимание, что он принимает любое регулярное выражение, которое будет принимать sed.
Этот инструмент использует следующие определения
Я использую эти переменные в моих сценариях, как так
источник
Чтобы расширить этот ответ , для ленивых из нас:
источник
tput
; вот для чего это!tput
дляsc
иrc
хотя (сохранить курсор, восстановить курсор). Хотя этот ответ называет меня «ленивым», его можно перефразировать как «практичный» или «прямо в точку».чтобы показать вывод сообщения другим цветом, вы можете сделать:
источник
Вам определенно следует использовать tput поверх последовательностей управления ANSI.
с 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."
Даст следующий результат:
источник
Я вместо жесткого кодирования escape-кодов, специфичных для вашего текущего терминала, вы должны использовать
tput
.Это мой любимый демонстрационный скрипт:
источник
Я использую это для цветной печати
Все основные цвета задаются как переменные, а также есть несколько полезных функций: XY, line и que. Поставьте этот скрипт в один из ваших и используйте все цветовые вариации и функции.
источник
И это то, что я использовал, чтобы увидеть все комбинации и решить, что читать круто:
источник
Я написал свэг чтобы добиться именно этого.
Вы можете просто сделать
Теперь вы можете установить все escape-команды в виде txt-файлов в указанное место назначения с помощью:
Или даже проще через:
Который установит цвета
~/.colors
.Либо вы используете их так:
Или этот путь, который я считаю на самом деле более интересным:
Проверьте это на asciinema !
источник
Вот простой небольшой скрипт, который я недавно написал, который раскрасит любой ввод по каналу вместо использования «Туалет».
File: color.bsh
Затем назовите его красным цветом (196):
$> echo "text you want colored red" | color.bsh 196
источник
Ссылаться на:
источник
Вот самое простое и удобочитаемое решение. Используя bashj ( https://sourceforge.net/projects/bashj/ ), вы просто выбираете одну из следующих строк:
256x256x256
цвета доступны, если у вас есть поддержка цветов в вашем терминальном приложении.источник
Подобно тому, как что-то немного там, пропуск через grep выделит его красным (но только красным). Вы также можете использовать именованные каналы, чтобы ваша строка была ближе к концу строки:
источник
после смешивания других решений из потока вот как мне удалось получить цвета на
npm scripts
выходе (gitbash CLI):источник
Этот ответ правильный, за исключением того, что призыв к цветам не должен быть внутри кавычек.
Должен сделать свое дело.
источник
echo -e '\e[0;31mHello Stackoverflow\e[0m'
. То же самое относится и к Bash.