บางครั้งฉันต้องการที่จะส่งสัญญาณออกมาเป็นสีเช่นกระบวนการ grep ... แต่เมื่อฉันส่งไปยังกระบวนการอื่นเช่น sed, รหัสสีจะหายไป ...
มีวิธีในการรักษารหัสเหล่านี้เหมือนเดิมหรือไม่?
นี่คือตัวอย่างที่สูญเสียผลลัพธ์สี:
echo barney | grep barney | sed -n 1,$\ p
บางครั้งฉันต้องการที่จะส่งสัญญาณออกมาเป็นสีเช่นกระบวนการ grep ... แต่เมื่อฉันส่งไปยังกระบวนการอื่นเช่น sed, รหัสสีจะหายไป ...
มีวิธีในการรักษารหัสเหล่านี้เหมือนเดิมหรือไม่?
นี่คือตัวอย่างที่สูญเสียผลลัพธ์สี:
echo barney | grep barney | sed -n 1,$\ p
คำตอบ:
หลายโปรแกรมที่สร้างการตรวจจับเอาต์พุตสีหากพวกเขากำลังเขียนไปยัง TTY และปิดสีหากพวกเขาไม่ได้ เนื่องจากรหัสสีนั้นน่ารำคาญเมื่อคุณต้องการจับภาพข้อความเท่านั้นดังนั้นพวกเขาจึงพยายาม "ทำสิ่งที่ถูกต้อง" โดยอัตโนมัติ
วิธีที่ง่ายที่สุดในการจับเอาท์พุทสีจากโปรแกรมเช่นนั้นคือบอกให้เขียนสีแม้ว่ามันจะไม่ได้เชื่อมต่อกับ TTY คุณจะต้องอ่านเอกสารของโปรแกรมเพื่อดูว่ามีตัวเลือกนั้นหรือไม่ (เช่นgrepมี--color=alwaysตัวเลือก)
คุณสามารถใช้expectสคริปต์unbufferเพื่อสร้างหลอกแบบนี้:
echo barney | unbuffer grep barney | sed -n 1,$\ p
unbufferข้อมูลมันช่วยให้เอาต์พุตของ IRC bot ของฉันเหมือนกับเอาต์พุตในเชลล์
มันเหมาะกับฉัน -! (ในสภาพแวดล้อม MingW ปัจจุบัน)
echo barney | grep --color=always barney | sed -n '1,$p'
**barney**
# barney แสดงเป็นข้อความสีแดง
$ grep --version
GNU grep 2.5.4
$ sed --version
GNU sed version 4.2.1
tree is colorized a-la dircolors if the LS_COLORS environment variable is set and output is to tty ... อาจจะ (?) มีวิธีที่จะหลอกให้ท่อคิดว่ามันส่งออกไปยัง TTY .. หรือวิธีแก้ไขปัญหาทั่วไปบางอย่าง .
man tree... มันก็มีตัวเลือกที่คล้ายกัน-C... บางทีมันอาจจะเป็นคุณสมบัติทั่วไปสำหรับโปรแกรมที่รหัสหนีสีเอาท์พุท ..
lessสามารถรับการป้อนข้อความ colorized (ดี :) ... เช่น:tree -C ~/ |less -Rหรือls -lR --color=always . |less -R