มีหน้าคู่มือใด ๆ สำหรับเอาต์พุตเชลล์สีหรือไม่?


23

คุณรู้ไหมว่าเอาต์พุตที่เป็นสีที่ทำโดยลำดับอักขระพิเศษเช่น:

echo -e "\e[34m Hello\n \e[0m"

สิ่งนี้จะสร้างคำว่า "Hello" ที่มีสีฟ้า เมื่อต้องการทำสิ่งนี้ฉันต้องค้นหาบนเว็บและมันยากเพราะแหล่งที่มาที่แตกต่างกันอาจพูดอะไรที่แตกต่างออกไป ฉันคิดว่าต้องมีคู่มือบางอย่าง แต่ฉันหาไม่เจอ แม้จะมีapropos colorหรือสิ่งที่คล้ายกัน ดังนั้นคำถามคือ - ฉันจะหาคู่มือที่เชื่อถือได้ที่ไหน?


2
คุณกำลังมองหาเอกสารเกี่ยวกับรหัสหลบหนี ANSI (ฉันมักจะใช้หน้า Wikipedia เมื่อฉันต้องการค้นหา)
chepner

โปรดทราบว่าคุณไม่จำเป็นต้องรู้ลำดับการหลีกเลี่ยงเหล่านั้น เชลล์หลายตัว (tcsh, zsh, fish อย่างน้อย) มี builtin รองรับเอาต์พุตเป็นสีโดยไม่ต้องเขียนลำดับเหล่านั้นอย่างชัดเจน
Stéphane Chazelas

คำตอบ:


27

มีแหล่งข้อมูลมากเกินไปที่จะแสดงรายการในหน้านี้:

  • คำสั่งecho -eใช้ส่วนขยายเพื่อแสดงผล\eเป็น ASCII 27 (ฐานแปด 33 หรือ "\ 033") วิธีพกพาในการพิมพ์การใช้เหล่านี้printf(POSIX) เปรียบเทียบกับมาตรฐานecho(POSIX)
  • ตัวอย่างของคุณสามารถเขียนใหม่เป็น

    printf "\033[34m Hello\n \033[0m"

  • มาตรฐานสำหรับการหลบหลีกสีคือECMA-48 (ฟังก์ชั่นการควบคุมสำหรับชุดอักขระที่มีรหัส)
  • ใน ECMA-48, 8.3.117 SGR - RENDITION เลือกรายการลำดับการควบคุมสำหรับการตั้งค่า 8 เบื้องหน้าและ 8 สีพื้นหลัง
  • นอกจากนี้ยังแสดงรหัส 39/49 "สีที่แสดงเริ่มต้น (กำหนดการนำไปปฏิบัติ)" และ 38/48 "ที่สงวนไว้สำหรับการสร้างมาตรฐานในอนาคตมีไว้สำหรับการตั้งค่าสีพื้นหน้าของอักขระตามที่ระบุใน ISO 8613-6 [CCITT Recommendation T.416]" นั่นคือมีข้อเสนอแนะจากองค์กรอื่น แต่มันไม่ได้เป็นส่วนหนึ่งของมาตรฐาน
  • อ่านอย่างใกล้ชิดคุณอาจสังเกตเห็นว่ามาตรฐานมีความคลุมเครือในหลาย ๆ ที่ช่วยให้การตีความที่แตกต่างกัน มันอธิบายถึงไวยากรณ์ของลำดับการควบคุมเหล่านี้ แต่ไม่ได้อธิบายของพวกเขาพฤติกรรม สำหรับสิ่งนั้นคุณต้องไปที่เอกสารประกอบสำหรับเทอร์มินัลนั้น ๆ
  • พบเอกสารของ xterm ในXTerm Control Sequencesซึ่งถือว่าเป็นความคุ้นเคยกับเอกสาร DEC ที่พบในhttp://vt100.net
  • สำหรับเทอร์มินัลอื่นหน้าคู่มือของพวกเขาอาจระบุการควบคุม (เช่นเดียวกับคอนโซล Linux ในconsole_codes )
  • เทอร์มินัลอื่น ๆ บันทึกตัวเองว่า "xterm"; สำหรับการอภิปรายดู xterm คำถามที่พบบ่อยเปรียบเทียบรุ่นโดยการควบคุมการนับ โชคดีที่การควบคุมสีส่วนใหญ่เข้ากันได้ (แต่ดูที่คำถามที่พบบ่อยเทอร์มินัลของฉันแสดงช่องว่างที่ไม่มีสี )
  • คุณสามารถอ่านหน้าคู่มือtputซึ่งช่วยให้คุณสามารถใช้terminfoความสามารถในเชลล์สคริปต์ ตัวอย่างของคุณสามารถเขียนใหม่เป็น

    printf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
    
  • แหล่งข้อมูลไม่กี่อย่างเช่นBash Prompt HOWTOและคู่มือการใช้สคริปต์การทุบตีขั้นสูงพูดถึงสี แต่ (ถึงแม้สิ่งเหล่านี้) ตามกฎจะมีช่องว่างและการละเว้นและไม่เป็นประโยชน์สำหรับ ECMA-48

  • แหล่งข้อมูลส่วนใหญ่อื่น ๆ ที่คุณจะพบกับสำเนาค้นหาเว็บจากแหล่งอื่น ๆ (เช่นแหล่งที่อ้างถึง) ฯลฯ และตามกฎให้ความสนใจเล็กน้อยกับมาตรฐานจริง

ส่วนที่เกี่ยวข้องใน ECMA-48 น่าจะเป็น 8.3.117 - "SGR - เลือกการแสดงผลกราฟิก" มันมีเพียงกล่าวถึงคำว่า "สีฟ้า" และรหัสที่พบมีทำงานอย่างน้อยใน XTerm ของฉัน
l0b0

ใช่ - ฉันจะเพิ่มคำอธิบาย
โทมัส Dickey

2
มันเป็นคำตอบที่ยอดเยี่ยมจริงๆ - หวังว่าคำตอบทั้งหมดจะเป็นเหมือนของคุณ
Sergius

1
xterm ยังรองรับโหมด 256 สีซึ่งสันนิษฐานว่าเป็นเอกสารในคู่มือข้างต้น
sendmoreinfo

ดูwynnnetherland.com/journal/ ......เพื่อรับข้อมูลที่เป็นประโยชน์มากมายรวมถึงแพ็คเกจ grc ซึ่งสามารถทำสิ่งต่าง ๆ ทุกอย่างด้วย colorizing ด้วยคำสั่งเอาต์พุต
โจ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.