Как я могу вывести цветной текст с помощью «printf» как в Mac OS X, так и в Linux?
Как я могу печатать на консоли в цвете кросс-платформенным способом?
01.03.2010
Ответы:
1
Вы можете использовать цветовые коды ANSI. Вот пример программы:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("%c[1;31mHello, world!\n", 27); // red
printf("%c[1;32mHello, world!\n", 27); // green
printf("%c[1;33mHello, world!\n", 27); // yellow
printf("%c[1;34mHello, world!\n", 27); // blue
return 0;
}
27
— это символ escape
. Вы можете использовать \e
, если хотите.
В сети есть списки всех кодов. Вот один.
01.03.2010
2
Другой вариант:
# Define some colors first (you can put this in your .bashrc file): red='\e[0;31m' RED='\e[1;31m' blue='\e[0;34m' BLUE='\e[1;34m' cyan='\e[0;36m' CYAN='\e[1;36m' green='\e[0;32m' GREEN='\e[1;32m' yellow='\e[0;33m' YELLOW='\e[1;33m' NC='\e[0m' #################
Затем вы можете ввести в терминале:
echo -e "${RED}This is an error${NC}" echo -e "${YELLOW}This is a warning${NC}" echo -e "${GREEN}Everythings fine!${NC}"
Не забудьте ${NC} в конце. NC означает «без цвета», что означает, что после вашего предложения он вернется к нормальному цвету. Если вы его забудете, вся подсказка и последующие команды будут окрашены в указанный вами цвет (конечно, вы можете ввести 'echo -e "${NS}"', чтобы вернуть его обратно).
11.03.2010
3
Для лучшей переносимости запросите базу данных terminfo. В ракушке,
colors=(black red green yellow blue magenta cyan white)
for ((i = 0; i < ${#colors[*]}; i++)); do
((j=(i+1)%${#colors[*]}))
printf '%s%s%s on %s%s\n' "$(tput setaf $i)" "$(tput setab $j)" \
"${colors[i]}" "${colors[j]}" "$(tput op)"
done
распечатает
black on red red on green green on yellow yellow on blue blue on magenta magenta on cyan cyan on white white on black
но в цвете.
01.03.2010
Новые материалы
Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..
Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально
Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..
Частный метод Python: улучшение инкапсуляции и безопасности
Введение
Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..
Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования
Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..
Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv)
Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..
Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..
Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..
"\033"
вместо"%c", 27
. 01.03.2010\e
работал на моей машине. Терминал OS X и большинство консольных приложений Linux поддерживают escape-последовательности ANSI, поэтому я думаю, что это удовлетворяет его вопрос. 01.03.2010\e
предназначен только для gcc. 11.10.2012printf
. Дело в том, что сама терминальная программа интерпретирует эти escape-коды как команды для изменения цвета, который она использует на экране. 15.06.2014