Как я могу произвести окрашенный текст с помощью "printf" и на Mac OS X и на Linux?
Вы можете использовать цветовые коды 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
, если хотите.
В сети есть списки всех кодов. Вот один .
Для лучшей переносимости запросите базу данных 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
, но в цвете.
Другой вариант:
# 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}"', чтобы вернуть его обратно).