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() {
    exit_code=$?
    [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " "
}
set_bash_prompt() {
    PS1='$(set_exit_code)$ ' # Double quotes give the same result
}
PROMPT_COMMAND=set_bash_promptดูเหมือนจะใช้งานไม่ได้ - บรรทัดนั้นเหมือนกับก่อนหน้าหลังการค้นหาและเรียกใช้
ฉันจะแก้ไขสิ่งนี้ได้อย่างไร