2009-04-01 31 views
10

Tôi thừa nhận rằng tôi sử dụng một dấu nhắc bash hơi dài dòng:Tại sao dấu nhắc bash này hoạt động lạ lùng/biến mất và cách khắc phục sự cố (OS X)?

--(username)-(Wed April 01|12:00:00)--(~ $

Gần đây, tôi đã có ý tưởng sáng để thay đổi nó để tùy thuộc vào giá trị thoát khỏi các lệnh trước, nếu thành công, các yếu tố nội thất của() sẽ là màu xanh lá cây, và nếu thất bại, chúng sẽ có màu đỏ. Tôi đã nhận được nó làm việc cho hầu hết các phần (một số trạng thái thoát lẻ sẽ thay đổi màu sắc cho cái gì khác, nhưng tôi ok với nó), nhưng khi gõ một lệnh mà là nhiều hơn một dòng, và làm cho các thiết bị đầu cuối để di chuyển, dấu nhắc biến mất! Lời nhắc của tôi hoạt động tốt khi không có màu sắc, vì vậy tôi đoán nó liên quan đến màu sắc của tôi thoát, và đặc biệt là của tôi không rõ ràng của, nhưng tôi không thể ghim nó xuống.

#.profile 
export PS1='--(\e[$((32-${?}))m\u\e[0m)-(\e[$((32-${?}))m\d\e[0m|\e[$((32-${?}))m\T\e[0m)--(\e[$((32-${?}))m\w\e[0m \$ '

Cảm ơn bạn trước!

Trả lời

34

Có vẻ như this sẽ giải quyết được sự cố của bạn.

Điều này dường như làm việc cho tôi *:

export PS1='--(\[\e[$((32-${?}))m\]\u\[\e[0m\])-(\[\e[$((32-${?}))m\]\d\[\e[0m\]|\[\e[$((32-${?}))m\]\T\[\e[0m\])--(\[\e[$((32-${?}))m\]\w\[\e[0m\] \$ ' 

* tốt, thực sự export PS1='\[email protected]\h:\w\$ ' công trình đối với tôi

Để trích dẫn bài liên kết, câu trả lời nằm trong việc thêm \ [và \] xung quanh tất cả các chuỗi màu của bạn trong tờ khai PS1:

Trước khi tôi có giá trị sau cho PS1:

'\ e [0; 34m \ h: \ w [] \ $ \ e [0m!'

đó đã cho tôi một dấu nhắc xanh tốt đẹp của các hình thức sau đây

hostname: làm việc -directory [command-number] $

Tuy nhiên, tôi đã gặp phải vấn đề giống như dòng bạn đã làm. Sửa chữa là chèn \ [và \] xung quanh các lối thoát ANSI để vỏ biết không bao gồm chúng trong tính toán gói dòng. Điều này dẫn đến giá trị sau cho PS1:

'\ [\ e [0; 34m \] \ h: \ w [] \ $ \ [\ e [m \]

+2

Chas, chỉ cần nhìn vào dấu nhắc đó làm cho đôi mắt của tôi đỏ. Cảm ơn vì sự giúp đỡ của bạn, thưa bạn! Của bạn là giải pháp duy nhất dường như hoạt động hoàn toàn. –

+0

Sau khi thay đổi màu của lời nhắc (trong Linux, không phải OSX), tôi gặp sự cố khi tìm kiếm ngược trong lịch sử của mình. Điều này giải quyết được vấn đề của tôi. Cảm ơn! – Mark

6

http://mywiki.wooledge.org/BashFAQ/053 - Tôi có một dấu nhắc lạ mắt với màu sắc, và bây giờ bash dường như không biết bao nhiêu thiết bị đầu cuối của tôi là. Các đường bao quanh không chính xác.

Nhân tiện; cho bạn tham khảo; đây là PS1 của tôi trông như thế này: alt text http://lhunath.lyndir.com/stuff/PS1.png

\[$reset$bold$green\]\[email protected]\h\[$blue\] \W \[$red\]${?/#0/\[$green\]}\$\[$reset\] 

Chú ý làm thế nào tôi đặt tất cả các mã màu trong $parameters để làm cho nó gọn gàng hơn, nhưng quan trọng hơn, bởi vì bạn nên sử dụng tput để tạo ra chúng. Xem:

http://mywiki.wooledge.org/BashFAQ/037 - Làm cách nào để in văn bản bằng các màu khác nhau?

Tôi khai báo tham số màu của mình trong tập lệnh tiện ích được cung cấp bởi my ~/.bashrc (và bất kỳ tập lệnh nào tôi viết) được gọi là bashlib.

Trên ghi chú cuối cùng; đặt định nghĩa PS1 của bạn trong ~/.bashrc và không export. Hoàn toàn không có lý do tại sao bạn nên thêm định nghĩa PS1 vào môi trường của bất kỳ và tất cả các quy trình bạn sinh ra từ trình bao của mình.

1

Bạn chỉ dường như thiếu sự bắt đầu và kết thúc khung xung quanh thoát của bạn (trước khi là người đầu tiên '\ e' và sau khi 'm' cuối cùng):

PS1='--(\[\e[$((32-${?}))m\u\e[0m)-(\e[$((32-${?}))m\d\e[0m|\e[$((32-${?}))m\T\e[0m)--(\e[$((32-${?}))m\w\e[0m\] \$ ' 

Như đã đề cập, các var PS1 không cần được xuất khẩu: chỉ vỏ của bạn cần xem nó.

Các vấn đề liên quan