นั่นคือลำดับการหลบหนีของ ANSI ; ลิงค์นั้นเป็นแผนภูมิรหัสสี แต่มีสิ่งที่น่าสนใจอื่น ๆ ในหน้า Wikipedia นั้นเช่นกัน ไม่ใช่ทุกคนที่ทำงานบน (เช่น) คอนโซล Linux ปกติ
สิ่งนี้ไม่ถูกต้อง:
\033]00m\] # white
0
รีเซ็ตเทอร์มินัลเป็นค่าเริ่มต้น (ซึ่งอาจเป็นสีขาว) รหัสจริงสำหรับพื้นหน้าสีขาวคือ 37 นอกจากนี้วงเล็บปิดที่ใช้ Escape ที่ท้าย ( \]
) ไม่ได้เป็นส่วนหนึ่งของลำดับสี (ดูวรรคสองสามข้อสุดท้ายด้านล่าง
โปรดทราบว่าเทอร์มินัล GUI บางตัวอนุญาตให้คุณระบุชุดสีที่กำหนดเอง สิ่งนี้จะส่งผลกระทบต่อผลลัพธ์
มีรายการอยู่ที่นี่ซึ่งเพิ่มพื้นหน้า 7 สีและสีพื้นหลัง 7 สีที่ฉันไม่เคยเห็นมาก่อน แต่ดูเหมือนจะใช้งานได้:
# Foreground colors
90 Dark gray
91 Light red
92 Light green
93 Light yellow
94 Light blue
95 Light magenta
96 Light cyan
# Background colors
100 Dark gray
101 Light red
102 Light green
103 Light yellow
104 Light blue
105 Light magenta
106 Light cyan
นอกจากนี้หากคุณมีเทอร์มินัล GUI 256 สี (ฉันคิดว่าส่วนใหญ่เป็นเทอร์มินัล) คุณสามารถใช้สีจากแผนภูมินี้:
ลำดับ ANSI เพื่อเลือกสิ่งเหล่านี้โดยใช้หมายเลขที่มุมซ้ายล่างเริ่มต้น38;5;
สำหรับพื้นหน้าและ48;5;
พื้นหลังจากนั้นตามด้วยหมายเลขสีเช่น:
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
ทำให้ฉันมีสีส้มอ่อนบนผิวสีแทน (หมายถึงแผนภูมิสีประมาณคร่าว ๆ )
คุณสามารถดูสีในแผนภูมินี้1เนื่องจากสีจะปรากฏบนเครื่องของคุณค่อนข้างง่าย:
#!/bin/bash
color=16;
while [ $color -lt 245 ]; do
echo -e "$color: \\033[38;5;${color}mhello\\033[48;5;${color}mworld\\033[0m"
((color++));
done
ผลลัพธ์คืออธิบายตนเอง
ระบบบางระบบตั้งค่าตัวแปร $ TERM เป็นxterm-256color
หากคุณอยู่บนเทอร์มินัล 256 สีผ่านรหัสเชลล์บาง/etc/profile
ระบบ สำหรับคนอื่น ๆ คุณควรจะสามารถกำหนดค่าเครื่องของคุณให้ใช้สิ่งนี้ได้ นั่นจะทำให้แอปพลิเคชั่น TUI รู้ว่ามี 256 สีและให้คุณเพิ่มบางสิ่งเช่นนี้ใน~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
ระวังว่าเมื่อคุณใช้ลำดับการหลีกสีในพรอมต์ของคุณคุณควรใส่ไว้ใน\
วงเล็บเหลี่ยมที่ได้รับการยกเว้น( นำหน้า) ดังนี้:
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
สังเกตุการ[
ตกแต่งภายในของลำดับสีไม่ได้หลบหนี แต่สิ่งที่อยู่รอบ ๆ วัตถุประสงค์ของหลังคือเพื่อบ่งบอกถึงเปลือกว่าลำดับล้อมรอบจะไม่นับรวมกับความยาวของอักขระของพรอมต์ หากการนับนั้นผิดสิ่งประหลาด ๆ จะเกิดขึ้นเมื่อคุณเลื่อนดูประวัติเช่นถ้ายาวเกินไปความยาวที่เกินของสตริงที่เลื่อนล่าสุดจะปรากฏขึ้นพร้อมกับข้อความแจ้งของคุณและคุณจะไม่สามารถถอยกลับเข้าไป มัน (มันไม่สนใจวิธีเดียวกันกับที่แจ้ง)
นอกจากนี้โปรดทราบว่าหากคุณต้องการรวมเอาท์พุทของคำสั่งที่รันทุกครั้งที่มีการใช้พรอมต์ (ซึ่งต่างจากครั้งเดียวเมื่อตั้งค่าพรอมต์) คุณควรตั้งเป็นสตริงตัวอักษรที่มีเครื่องหมายคำพูดเดี่ยวเช่น:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
แม้ว่าจะไม่ได้เป็นตัวอย่างที่ดีถ้าคุณมีความสุขกับการใช้ทุบตีพิเศษ\d
หรือ\D{format}
พรอมต์หนี - ซึ่งไม่ได้เป็นเรื่องของคำถาม แต่สามารถพบได้ในภายใต้man bash
PROMPTING
มีการหลีกเลี่ยงที่มีประโยชน์อื่น ๆ อีกมากมายเช่น\w
ไดเรกทอรี\u
ปัจจุบันสำหรับผู้ใช้ปัจจุบัน ฯลฯ
1. ส่วนหลักของแผนภูมินี้สีที่ 16 - 231 (สังเกตว่าไม่อยู่ในลำดับตัวเลข) คือลูกบาศก์สี RGB 6 x 6 x 6 "คิวบ์สี" หมายถึงความจริงที่ว่าพื้นที่สี RGB สามารถแสดงโดยใช้อาร์เรย์สามมิติ (โดยมีแกนหนึ่งสำหรับสีแดงหนึ่งสำหรับสีเขียวและอีกหนึ่งสำหรับสีฟ้า) แต่ละสีในคิวบ์ที่นี่สามารถแสดงเป็นพิกัดในอาร์เรย์ 6 x 6 x 6 และดัชนีในแผนภูมิคำนวณได้ดังนี้:
16 + R * 36 + G * 6 + B
สีแรกในลูกบาศก์ที่ดัชนี 16 ในแผนภูมิคือสีดำ (RGB 0, 0, 0) คุณสามารถใช้สูตรนี้ในเชลล์สคริปต์:
#!/bin/sh
function RGBcolor {
echo "16 + $1 * 36 + $2 * 6 + $3" | bc
}
fg=$(RGBcolor 1 0 2) # Violet
bg=$(RGBcolor 5 3 0) # Bright orange.
echo -e "\\033[1;38;5;$fg;48;5;${bg}mviolet on tangerine\\033[0m"
\]
ที่นี่ไม่ได้เป็นส่วนหนึ่งของลำดับสี มันมีจุดประสงค์ในการตั้งค่าให้พร้อมท์โดยเฉพาะ (ฉันได้เพิ่มวรรคสองสามข้อต่อท้ายคำตอบของฉันเกี่ยวกับเรื่องนี้) "มันคงจะดีถ้ามีรูปแบบที่อ่านได้อีกด้วย" -> วาง cut n 'ในคำตอบของคุณเองเป็นวิธีหนึ่งในการทำเช่นนี้