ฉันจะพิมพ์ข้อผิดพลาดมาตรฐานเป็นสีแดงลงในคอนโซลแทนที่จะใช้สีเดียวกันของเอาต์พุตมาตรฐานได้อย่างไร
เป็นไปได้หรือไม่ที่ใช้Gnome Terminal
hilite
hilite
ฉันจะพิมพ์ข้อผิดพลาดมาตรฐานเป็นสีแดงลงในคอนโซลแทนที่จะใช้สีเดียวกันของเอาต์พุตมาตรฐานได้อย่างไร
เป็นไปได้หรือไม่ที่ใช้Gnome Terminal
hilite
hilite
คำตอบ:
ฉันใช้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 ของฉันให้เป็นสีแดงเหมือนที่เป็นสีแดงแล้ว )
โดยทั่วไปใช่เนื่องจาก 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 ของโปรแกรมใด ๆ ที่คุณกำลังเรียกใช้ สิ่งนี้ไม่ตรงไปตรงมาหากไม่มีการแยกวิเคราะห์เอาต์พุตผ่านตัวกรอง นี่คือตัวอย่าง (พบที่นี่ ) วิธีการ:
กำหนดฟังก์ชั่น (คุณสามารถใส่ไว้ในไฟล์. bashrc ของคุณ):
color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
เริ่มโปรแกรมเช่นนี้:
color program
stderr จากโปรแกรมจะได้รับสีแดง