Hành vi kỳ lạ trong Terminal với tùy chỉnh .bash_profile


8

Thật khó để mô tả hành vi, nhưng đây là một đoạn phim ngắn:

http://www.youtube.com/watch?v=9KqHBA94FPI

Về cơ bản, khi nhập các lệnh nhiều dòng, ở cuối dòng đầu tiên, khối chèn sẽ quay trở lại bắt đầu của dòng đầu tiên, ghi trên dòng đầu tiên, sau đó tiếp tục như bình thường trên các dòng thứ hai, thứ ba, v.v. . Khi xóa, nó cho phép tôi xóa toàn bộ lệnh, cộng với các khoảng trống trên dòng phía trên lệnh (Tôi đã thiết lập để các lệnh được chèn sau một dòng chứa thông tin người dùng @ host / Directory. Nó thậm chí còn cho phép tôi xóa Phần cuối của Thư mục và máy chủ lưu trữ mà tôi đã mô tả ở trên. Xin lỗi tôi rất tệ khi giải thích điều này, video sẽ làm việc tốt hơn.

Đây là nội dung của .bash_profile của tôi:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

Câu trả lời:


12

Bạn nên bao quanh các ký tự không in của mình (trong trường hợp này là các chuỗi thoát ANSI của bạn) với các chuỗi thoát bash: \[\]. Bằng cách đó, bash sẽ biết các ký tự kèm theo không thể nhìn thấy, tức là. họ không chiếm không gian, tức là. chúng không nên được bao gồm trong phép tính độ dài từ được sử dụng bởi trình bao bọc dòng.

nói cách khác thay đổi PS1định nghĩa của bạn :

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

… đến:

export PS1="\[\e[31m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[33m\]\w\n \$ \[\e[0m\] "

Và đây là cùng một PS1giá trị, chỉ dành cho người đọc, với khả năng đọc có thể được cải thiện (ANSI thoát ở hàng dưới, bash thoát ở giữa và in các ký tự ở hàng trên.)

          \u          @          \h          \w\n \$
\[      \]  \[     \] \[      \]  \[      \]        \[     \] 
  \e[31m      \e[0m     \e[34m      \e[33m            \e[0m    

Đọc thêm:


Điều này là hoàn hảo, giải quyết vấn đề của tôi. Cảm ơn rất nhiều vì sự giúp đỡ!
Blair Beckwith

Blair, chào mừng bạn đến hỏi khác nhau! Nếu bạn thích một câu trả lời cho câu hỏi của bạn xin vui lòng upvote và chấp nhận nó.
nohillside

0

Tôi tất cả mọi người

Tôi đã gặp vấn đề tương tự và tôi đã tìm thấy một giải pháp chỉ bằng cách thay đổi biến PS1 của tôi từ biến ban đầu sang biến rất đơn giản, chỉ là tên của tôi thực sự: export PS1 = Alex

Bây giờ thiết bị đầu cuối của tôi không có bất kỳ hành vi lạ nữa.

Hy vọng nó sẽ giúp.

Alex (trên Mac Lion 10.8)

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.