Как я могу распечатать к консоли в цвете межплатформенным способом?

Как я могу произвести окрашенный текст с помощью "printf" и на Mac OS X и на Linux?

29
задан Reinstate Monica 10 October 2012 в 19:48
поделиться

3 ответа

Вы можете использовать цветовые коды 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 , если хотите.

В сети есть списки всех кодов. Вот один .

32
ответ дан 28 November 2019 в 01:52
поделиться

Для лучшей переносимости запросите базу данных 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

, но в цвете.

2
ответ дан 28 November 2019 в 01:52
поделиться

Другой вариант:

# 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}"', чтобы вернуть его обратно).

5
ответ дан 28 November 2019 в 01:52
поделиться