วิธีพิมพ์ข้อผิดพลาดมาตรฐานเป็นสีแดง


14

ฉันจะพิมพ์ข้อผิดพลาดมาตรฐานเป็นสีแดงลงในคอนโซลแทนที่จะใช้สีเดียวกันของเอาต์พุตมาตรฐานได้อย่างไร

เป็นไปได้หรือไม่ที่ใช้Gnome Terminal


ลิงค์นี้อาจช่วยคุณได้
devav2

คุณสามารถเปิดการทำงานนี้สำหรับคำสั่งอย่างใดอย่างหนึ่งโดยใช้ยูทิลิตี้ คุณต้องผนวกคำสั่งเชลล์ของคุณด้วยตนเองเพื่อใช้ แต่ก็ยังมีประโยชน์ถ้าคุณรู้หรือสงสัยว่าคำสั่งแสดงผลข้อผิดพลาดและคุณต้องการค้นหา hilitehilite
Rory O'Kane

คำตอบ:


8

ฉันใช้stderredและพบว่าเป็นทางออกที่ดี ตามบันทึกของreadme :

Stderred hooks บน write () และตระกูลของฟังก์ชั่นสตรีม (fwrite, fprintf, error ... ) จาก libc เพื่อ colorize เอาต์พุต stderr ทั้งหมดที่ไปยังเทอร์มินัลซึ่งทำให้แตกต่างจาก stdout โดยทั่วไปแล้วมันจะล้อมรอบข้อความที่ไปยังไฟล์ด้วย descriptor "2" พร้อมกับรหัสหลบหนี ANSI ที่เหมาะสมทำให้ข้อความเป็นสีแดง

มันถูกนำไปใช้เป็นไลบรารี่ที่ใช้ร่วมกันและไม่จำเป็นต้องคอมไพล์ของไบนารีที่มีอยู่อีกครั้งด้วยคุณสมบัติการโหลด / แทรกล่วงหน้าของลิ้งค์ไดนามิก

รองรับบน Linux (พร้อม LD_PRELOAD), FreeBSD (รวมถึง LD_PRELOAD) และ OSX (พร้อม DYLD_INSERT_LIBRARIES)

เป็นการเรียบเรียงโดยตรง แต่คุณจำเป็นต้องสร้างจากแหล่งโดยทำตามคำแนะนำจากเว็บไซต์ Github :

sudo apt-get install build-essential git cmake 

แล้วก็

git clone git://github.com/sickill/stderred.git
cd stderred

แล้วก็

make

ส่วนที่สำคัญที่สุดของมันคือการเพิ่มบรรทัดที่เหมาะสมกับคุณ.bashrc; คุณต้องลิงก์ไปยังlibstderred.soไฟล์ในไดเรกทอรีสร้าง คุณต้องใช้พา ธ สัมบูรณ์ที่ไดเร็กทอรีการสร้างคือ (/ home / mike / src / stderred / build) ฉันเพิ่มสิ่งต่อไปนี้ใน.bashrc:

export LD_PRELOAD="/home/mike/src/stderred/build/libstderred.so${LD_PRELOAD:+:$LD_PRELOAD}"

เห็นได้ชัดว่าเมื่อคุณไม่ต้องการใช้อีกต่อไปให้ลบบรรทัดด้านบนออกจาก.bashrcและรีสตาร์ทเครื่อง

ผลลัพธ์ทดสอบกับไฟล์ที่ไม่มีอยู่จริง (เห็นได้ชัดว่ามันจะไม่ทำงานเมื่อsudoมีการใช้งานเนื่องจากผู้ใช้.bashrcจะไม่อ่านเมื่อตั้งค่าสภาพแวดล้อมที่แตกต่างกัน):

(โดยที่มันไม่เปลี่ยน duke @ nukem ของฉันให้เป็นสีแดงเหมือนที่เป็นสีแดงแล้ว )

ป้อนคำอธิบายรูปภาพที่นี่


ไม่อยากจะเชื่อเลยว่าฉันไปหลายปีโดยไม่รู้ว่ามันมีอยู่จริง! มันมีประโยชน์อย่างน่าอัศจรรย์และน่าจะเป็นส่วนหนึ่งของระบบปฏิบัติการมานานนับร้อยปีแล้ว :)
Roger Dahl

6

โดยทั่วไปใช่เนื่องจาก Gnome Terminal เป็นเทอร์มินัล ANSI และสนับสนุนรหัสการหลบหนี ANSI มาตรฐาน

นี่คือตัวอย่าง พิมพ์สิ่งนี้ใน terminal ของคุณ:

echo -e "\e[01;31mREDRUM\e[0m"

-eตัวเลือกที่จะช่วยให้การตีความรหัสทับขวาเพื่อให้\eกลายเป็น "Esc" (รหัสฐานสิบหก 0x1b) หรือหากต้องการเข้าสู่การหลบหนีโดยตรงให้กดctrl-V Esc:

echo  "^[[01;31mREDRUM^[[0m"

หลบหนีและ[ทั้งสองรวบรวมรหัสที่เทอร์มินัลรู้จัก หลังจากลำดับที่คุณจะต้องใส่ลำไส้ใหญ่ ( ;) mรายการที่คั่นของคุณลักษณะยกเลิกโดย ดูที่นี่สำหรับรหัสทั้งหมด ตัวอย่างรวมถึงแอตทริบิวต์0(รีเซ็ตแอตทริบิวต์ทั้งหมดตามที่คุณอาจสังเกตเห็นข้างต้นนั่นคือลำดับที่ยุติตัวอย่างของฉัน) และลักษณะ (ขีดเส้นใต้, สว่าง, ตัวหนา ฯลฯ ) รวมทั้งคุณลักษณะสีบางอย่าง

คำตอบข้างต้นบอกวิธีใช้สีเมื่อคุณเขียนโปรแกรมของคุณเอง

อย่างไรก็ตามหากฉันเข้าใจคำถามของคุณอย่างถูกต้องคุณต้องการให้มีการแยกภาพสำหรับ stderr และ stdout ของโปรแกรมใด ๆ ที่คุณกำลังเรียกใช้ สิ่งนี้ไม่ตรงไปตรงมาหากไม่มีการแยกวิเคราะห์เอาต์พุตผ่านตัวกรอง นี่คือตัวอย่าง (พบที่นี่ ) วิธีการ:

  1. กำหนดฟังก์ชั่น (คุณสามารถใส่ไว้ในไฟล์. bashrc ของคุณ):

    color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
    
  2. เริ่มโปรแกรมเช่นนี้:

    color program
    

stderr จากโปรแกรมจะได้รับสีแดง


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