2010-03-01 11 views

Respuesta

28

Puede usar los códigos de color ANSI. He aquí un ejemplo de programa:

#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; 
} 

El 27 es el carácter escape. Puede usar \e si lo prefiere.

Hay listas de todos los códigos en la web. Here is one.

+1

Suponiendo secuencias de escape ANSI, como popularizado por derivados VT100 (VT1xx no tenía color). Y podrías haber usado '" \ 033 "' en vez de '"% c ", 27'. – ephemient

+0

@ephemient, incluso '\ e' trabajado en mi máquina. La terminal de OS X y la mayoría de las aplicaciones de la consola Linux soportan las secuencias de escape de ANSI, así que creo que satisface su pregunta. –

+0

Si recuerdo bien, '\ e' es solo gcc. – Jack

2

Para la mejor portabilidad, consulte la base de datos terminfo. Con cáscara,

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 

imprimirá

 
black on red 
red on green 
green on yellow 
yellow on blue 
blue on magenta 
magenta on cyan 
cyan on white 
white on black 

pero en color.

+0

+1 agradable, pero ¿cómo puedo hacer esto desde C? Parece que no puedo encontrar los equivalentes de la biblioteca para el tput. ¿Quizás lo haga directamente desde el código abierto? – kfmfe04

+0

bien - parece que tengo que profundizar en termcap y termios – kfmfe04

4

Otra opción es:

 
# 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' 
################# 

Entonces se puede escribir en el terminal:

 
echo -e "${RED}This is an error${NC}" 
echo -e "${YELLOW}This is a warning${NC}" 
echo -e "${GREEN}Everythings fine!${NC}" 

no se olvide el $ {NC} al final. NC significa "sin color", lo que significa que después de su oración, volverá al color normal. Si lo olvida, toda la solicitud y los comandos posteriores tendrán el color que especificó (por supuesto, puede escribir 'echo -e' $ {NS} '' para volver a cambiarlo).

+0

Esto no parece funcionar en terminal en mac (OS X v10.9.1) - No lo puse en .bashrc, solo lo definí dentro del shell en la línea de comando, pero el texto se imprimió directamente. – Anand

+0

La pregunta era sobre el comando 'printf', no comandos de terminal. Además, se solicitó una solución multiplataforma, 'poner esto en tu .bashrc' no es eso. – TimZaman

+0

@TimZaman Bueno, técnicamente el OP solicitó una solución "tanto para Mac OS X como para Linux", por lo que ponerlo en .bashrc es exactamente eso. Aunque estoy de acuerdo en que no está respondiendo cómo hacerlo usando "printf". Siento la necesidad de señalar que di mi respuesta como alternativa: "Otra opción es:", en lugar de afirmar que esta era realmente la respuesta. – lugte098

Cuestiones relacionadas