3
วิธีรวมคำสั่งใน PS1 ของ Bash โดยไม่หยุดการคำนวณความยาวบรรทัด
Tonin ชี้ให้เห็นข้อผิดพลาดในของฉันพรอมต์เริ่มต้น ตัวอย่างที่น้อยที่สุด: ตั้งค่า PS1: PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " ")$ ' ณ จุดนี้พรอมต์จะมีลักษณะดังนี้: $ ทริกเกอร์เอาท์พุทรหัสออกจากการทำงาน: false ตอนนี้พรอมต์ประกอบด้วยรหัสออกเป็นสีแดงที่จุดเริ่มต้นของบรรทัด: 1 $ กด-Ctrlr พิมพ์ "false" ตอนนี้พรอมต์มีเฉพาะการค้นหา: (reverse-i-search)`false': false Enterกด ประวัติเทอร์มินัลที่ได้รับจะมีสิ่งต่อไปนี้: 1 $ch)`false': false ผลลัพธ์ที่คาดหวัง: 1 $ false นั่นคือดูเหมือนว่าเอาต์พุตการค้นหาประวัติจะถูกผสมกับพรอมต์และซ่อนคำสั่งจริงที่ถูกเรียกใช้ ฉันพยายามหลีกเลี่ยงปัญหานี้โดยใช้PROMPT_COMMAND : set_exit_code() …