ฉันจะหยุดสี bash shell PS1 เพื่อหยุดที่ส่วนท้ายของคำสั่งได้อย่างไร


12

ฉันมีสี PS1 ที่กำหนดเองซึ่งฉันมีคำสั่งเชลล์จริงในสีที่แตกต่างดังนั้นฉันจึงสามารถดูว่าคำสั่งใดที่ฉันพิมพ์และแยกออกจากเอาต์พุตคำสั่งอย่างรวดเร็ว

สมมติว่าสีใน PS1 ถูกตั้งค่าเป็น 'สีน้ำเงิน' สำหรับพรอมต์คำสั่งและสีเริ่มต้นในเปลือกของฉันเป็นสีขาว

  • ฉันพิมพ์คำสั่งเช่น ls (ls -l เป็นสีน้ำเงิน)
  • เอาต์พุตที่สร้างขึ้นบรรทัดแรกยังคงเป็นสีน้ำเงิน
  • เส้นที่เหลือทั้งหมดมาเป็นสีขาว

สิ่งที่ฉันต้องการคือผลลัพธ์ทั้งหมดหลังจากคำสั่งให้เป็น 'สีขาว'

ตัวอย่างอื่น:

  • ฉันพิมพ์คำสั่ง 'cat' สีจะเป็นสีน้ำเงิน
  • เอาท์พุทมาเอาท์พุททั้งหมดเป็นสีฟ้า

ฉันต้องการให้ผลลัพธ์เป็น 'สีขาว' ในขณะที่ยังคงพร้อมท์คำสั่งที่ฉันพิมพ์ 'สีน้ำเงิน'

ในบางคำสั่งมันดีคำสั่งอื่น ๆ สีเดียวกันล้นในบรรทัดแรกของการส่งออกแล้วสีเริ่มต้นเตะในและคำสั่งอื่น ๆ บางส่วนเอาท์พุททั้งหมด (เช่น cat) มีสีเดียวกัน

มีวิธีการเก็บเฉพาะคำสั่งที่ฉันพิมพ์ในสีเดียวและที่เหลือเป็นค่าเริ่มต้นหรือไม่?

ฉันใช้ OSX

แก้ไข # 1

นี่คือภาพหน้าจอที่ @ derobert เชื่อมโยงกับความคิดเห็นที่แสดงสิ่งที่ฉันกำลังมองหา

                 เอสเอส # 1


2
คุณต้องแสดงพรอมต์ของคุณให้เราเพื่อให้เราสามารถระบุข้อผิดพลาดได้
เกล็นแจ็คแมน

คำตอบ:


14

โดยทั่วไปคุณต้องการรีเซ็ตสีของเทอร์มินัลก่อนทุบตีดำเนินการคำสั่ง trapซึ่งสามารถทำได้ด้วย

ตัวอย่างเช่น:

trap '[[ -t 1 ]] && tput sgr0' DEBUG

Bash จะรันDEBUGกับดักทันทีก่อนที่คำสั่งดังนั้นสิ่งนี้จะส่งผลให้tput sgr0(ซึ่งรีเซ็ตแอ็ตทริบิวต์การจัดรูปแบบ) ที่ถูกเรียกใช้ก่อนแต่ละคำสั่ง

[[ -t 1 ]]คือการตรวจสอบความปลอดภัยเพื่อให้แน่ใจว่าเป็นจริง STDOUT ขั้ว อาจมีบางกรณีที่ STDOUT ของ bash ไม่ได้เชื่อมต่อกับเทอร์มินัล (ไพพ์, ssh รีโมต, ฯลฯ ) และดังนั้นคุณไม่ต้องการtputส่งรหัสการหลีกเลี่ยงเทอร์มินัล


คุณใส่สิ่งนี้ไว้ที่ไหน? สมมติว่า PS1 ไม่ได้ตั้งค่าสี ตอนนี้คุณจะเพิ่มบรรทัดนี้เพื่อดำเนินการคำสั่งนี้หลังจากผู้ใช้ใส่คำสั่งของเขาและกด Enter?
polym

1
@polym ในของคุณ.bashrc(หรือทุกที่ที่$PS1ตั้งค่าไว้) ฉันจะใส่มันไว้ข้างๆ$PS1คำจำกัดความเพื่อให้คุณรู้ว่ามันเกี่ยวข้องกัน
แพทริค

โอเคว้าวมันใช้งานได้ดี ความเป็นไปได้ใด ๆ ที่สิ่งนี้อาจผิดพลาดได้?
polym

@polym ไม่ได้อีกต่อไป
Patrick

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