2010-03-01 35 views

Trả lời

28

Bạn có thể sử dụng mã màu ANSI. Đây là một chương trình mẫu:

#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 là ký tự escape. Bạn có thể sử dụng \e nếu muốn.

Có danh sách tất cả các mã trên web. Here is one.

+1

Giả sử chuỗi thoát ANSI, như được phổ biến bởi các dẫn xuất VT100 (VT1xx không có màu). Và bạn có thể đã sử dụng '" \ 033 "' thay vì '"% c ", 27'. – ephemient

+0

@ephemient, thậm chí '\ e' đã hoạt động trên máy của tôi. Thiết bị đầu cuối của OS X và hầu hết các ứng dụng giao diện điều khiển Linux hỗ trợ các chuỗi thoát ANSI, vì vậy tôi nghĩ nó đáp ứng được câu hỏi của anh ta. –

+0

Nếu tôi nhớ là tốt, '\ e' chỉ là gcc. – Jack

2

Để có tính di động tốt nhất, hãy truy vấn cơ sở dữ liệu terminfo. Trong vỏ,

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 

sẽ in ra

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

nhưng trong màu sắc.

+0

+1 tốt đẹp, nhưng làm cách nào để làm điều này từ C? Tôi không thể tìm thấy tương đương thư viện cho tput - có thể yank nó trực tiếp từ mã nguồn mở? – kfmfe04

+0

ok - có vẻ như tôi cần phải đào sâu vào termcap và termios – kfmfe04

4

lựa chọn khác là:

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

Sau đó, bạn có thể gõ trong terminal:

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

Đừng quên $ {NC} ở cuối. NC là viết tắt của "no color", có nghĩa là sau câu của bạn, nó sẽ trở lại màu bình thường. Nếu bạn quên nó, toàn bộ dấu nhắc và lệnh sau đó sẽ có màu bạn đã chỉ định (tất nhiên bạn có thể gõ 'echo -e' $ {NS} "'để thay đổi lại).

+0

Điều này dường như không hoạt động trên thiết bị đầu cuối trên mac (OS X v10.9.1) - Tôi đã không đặt nó trong .bashrc, chỉ cần định nghĩa nó trong shell trên dòng lệnh - nhưng văn bản được in trực tiếp. – Anand

+0

Câu hỏi đặt ra là lệnh 'printf', không phải lệnh đầu cuối. Hơn nữa, một giải pháp nền tảng chéo đã được yêu cầu, 'đặt cái này vào trong .bashrc' của bạn không phải thế. – TimZaman

+0

@TimZaman Vâng, về mặt kỹ thuật, OP đã yêu cầu một giải pháp "trên cả Mac OS X và Linux", vì vậy hãy đặt nó vào .bashrc chính xác là như vậy. Mặc dù tôi đồng ý rằng nó không trả lời làm thế nào để làm điều đó bằng cách sử dụng "printf". Tôi cảm thấy cần phải chỉ ra rằng tôi đã đưa ra câu trả lời của tôi như là một thay thế: "Một lựa chọn khác là:", thay vì nói điều này thực sự là câu trả lời. – lugte098

Các vấn đề liên quan