Câu hỏi Dấu nhắc màu Bash và các lệnh dài


Tôi đang tô màu các phần của dấu nhắc bash của tôi bằng cách sử dụng các chuỗi thoát ANSI. Điều này làm việc tuyệt vời, cho đến khi lệnh mà tôi hiện đang gõ là đủ lâu để nó phải bọc. Thay vì phần còn lại của lệnh hiển thị trên dòng tiếp theo, nó kết thúc tốt đẹp trở lại cột 1 của dòng hiện tại, ghi đè đầu của dấu nhắc.

Tôi nhận được hành vi đó với lời nhắc này:

export PS1="[\u][\033[0;32;40mdemo \033[0;33;40m1.5.40.b\033[0;37;40m] \w> \033[0m"

nhưng nó hoạt động chính xác với cùng một dấu nhắc, các dãy ANSI loại bỏ:

export PS1="[\u][demo 1.5.40.b] \w> "

Tôi đang kết nối bằng phiên bản hiện tại của Putty, với cài đặt Putty mặc định. Hệ điều hành là Ubuntu 8.10.


2
2018-04-12 18:58


gốc




Các câu trả lời:


Nó phải là một cái gì đó trong đó vì chuỗi sau từ tài liệu bash không thể hiện cùng một hành vi:

PS1="\[\033[1;34m\][\$(date +%H%M)][\u@\h:\w]$\[\033[0m\] "

Chưa biết nó là gì, nhưng tác phẩm của họ và của bạn thì không ...

CHỈNH SỬA: Thử:

PS1="[\u][\[\033[1;32m\]\[\033[1;40m\]demo \[\033[1;33m\]\[\033[1;40m\]1.5.40.b\[\033[0;37m\]] \w> \[\033[0m\] "

1
2018-04-12 19:19



Điều đó đã làm điều đó. Lý do, nó quay ra, là bash cần phải được cho biết "các ký tự sau đây là không thể in" vì vậy nó không trở nên bối rối trong độ dài của dấu nhắc. Điều này được thực hiện bằng cách kèm theo các ký tự không in được trong \ [và \]. Xem tldp.org/HOWTO/Bash-Prompt-HOWTO/nonprintingchars.html - Eric J.