Khắc phục lỗi bash line-gói & backspace hiển thị trên Mac OS X?


14

Khi tôi mở Terminal (trên Mac OS X 10.5.8) và nhập một dòng lệnh dài: văn bản thay thế

... văn bản không đi đến dòng tiếp theo khi nó bao quanh: văn bản thay thế văn bản thay thế

Ngoài ra, đôi khi khi tôi gõ một lệnh và sau đó xóa lùi (hoặc mũi tên lên hoặc ^ U): văn bản thay thế

... toàn bộ dòng không bị xóa và tôi không thể lùi lại sau một điểm nhất định: văn bản thay thế văn bản thay thế

Đây có phải là một lỗi bash đã biết (trên Mac OS X) không? Có sửa chữa không?

Cập nhật: Juliano đã đúng, sự cố xảy ra do phân định không chính xác chuỗi mã bảng điều khiển trong biến PS1 của tôi. Thay đổi:

export PS1='\[\033[1;34m\]\$\]\033[0m\] '

... trong tôi .bashrctới:

export PS1='\[\033[1;34m\]\$\[\033[0m\] '

...Đã giải quyết vấn đề.


1
+1 cho ảnh chụp màn hình đẹp nhất của màn hình đầu cuối mà tôi từng thấy.
Tạm dừng cho đến khi có thông báo mới.

1
hai dòng mã bạn hiển thị trong bản cập nhật của bạn giống hệt nhau.
Magne

Bắt tốt, @Magne. Đã bốn năm kể từ khi tôi xem xét điều này, vì vậy tôi không nhớ cụ thể, nhưng tôi cho rằng "trước đây" đã bị mất a \].
Daryl Spitzer

chúng không giống nhau: cái thứ nhất có \]thay vì '[`
Ohad Cohen

Câu trả lời:


19

Hành vi phù hợp với việc có mã bảng điều khiển trong lời nhắc của bạn (để thay đổi màu sắc, v.v.) và không đánh dấu đúng sau đó để bash biết rằng chúng là vô hình.

Trước bất cứ điều gì khác, hãy làm điều này:

PS1='\w\$ '

Và sau đó thử lại. Nếu vấn đề được giải quyết, thì những nghi ngờ của tôi là chính xác.

Mỗi chuỗi mã bàn điều khiển phải được phân định bằng \[\]trong biến PS1. Họ nói với bash rằng bất cứ thứ gì trong đó không di chuyển vị trí con trỏ. Đọc hướng dẫn sử dụng bash để biết thêm thông tin.


Đó là vấn đề. Cảm ơn bạn! Tôi sẽ cập nhật câu hỏi của tôi với các chi tiết.
Daryl Spitzer

Và nếu nó không giải quyết được vấn đề thì sao?
levesque

3

Để giúp tạo một dấu nhắc vệ sinh, hãy thử http://www.kirsle.net/wizards/ps1.html thật tuyệt vời. Chỉ cần cẩn thận với dấu ngoặc trong lời nhắc của bạn, nó sẽ cố gắng thoát khỏi chúng hoặc một cái gì đó.


+1 Trong khi câu trả lời của @ Juliano là đúng về mặt kỹ thuật, liên kết này ở đây là thứ đặt các tputlệnh chính xác - đã sửa lỗi dòng mới, `` dòng mới và các sửa lỗi "lịch sử + backspaces" khác mà sử dụng các mã ANSI khác không thể sửa.
Eric Duncan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.