Các dòng dài chồng lên nhau trong dấu nhắc tùy chỉnh Bash PS1


13

Tôi đã cấu hình một PS1dấu nhắc bash hai dòng ưa thích , với tên máy chủ, thời gian, tên người dùng và các biến hữu ích khác.

PS1="\n\[\033[1;34m\]\342\226\210\342\226\210 \u @ $SERVER_NAME""$BBlue"" \w""$Color_Off  \n\[\033[0;36m\]\342\226\210\342\226\210 \d \t $ \[\033[0;39m\]"

nhập mô tả hình ảnh ở đây

Nguồn Github đầy đủ ở đây .

Vấn đề là các dòng dài thường được quấn quanh mình, có nghĩa là dòng mới chồng lên dòng trước.

Vấn đề không nhất quán: một số dòng được bọc chính xác, một số thì không.

Bất kỳ ý tưởng làm thế nào để khắc phục điều này?

Câu trả lời:


16

Đây là PS1 hai dòng ưa thích của tôi cho dấu nhắc bash.

PS1

\[\e[1;32m\]\H\[\e[0m\] :: \[\e[1;30m\]\d\[\e[0m\] \@ :: \[\e[1;33m\]\w\n\[\e[1;34m\]\u $ \[\033[0m\]

Vì vậy, đây là những gì tôi đã làm. Nếu đây là màu của tôi:

\e[1;32m

Tôi đã đổi nó thành:

\[\e[1;32m\]

Về cơ bản, bạn cần gửi nó vào:

\[$mycolor\]

Kiểm tra câu trả lời này .


+1 Cảm ơn. Thật kỳ lạ, nó dường như không hoạt động trên mac.
Adam Matan

Bạn là một người cứu rỗi cuộc sống! Đối với mac, Adam .. Rất có thể là do số lượng cột. Hãy thử đặt lời nhắc thành một chuỗi ký tự, như 'đây là lời nhắc của tôi:' và xem vấn đề có còn tồn tại không. Nếu vậy, cài đặt cột của bạn trên thiết bị đầu cuối của bạn quá rộng hoặc quá hẹp.
Alex Summers

7

Tìm giải pháp này trực tuyến, trong đó đề xuất một dấu ngoặc đóng cho các biến màu:

Thay đổi cai nay đi:

Black='\e[0;30m'        # Black
Red='\e[0;31m'          # Red
Green='\e[0;32m'        # Green

đến:

Black='\e[0;30m\]'        # Black
Red='\e[0;31m\]'          # Red
Green='\e[0;32m\]'        # Green

Tôi đã cam kết thay đổi - hy vọng nó hoạt động như mong đợi.


1
không chắc chắn những gì cần phải đạt được. Bạn cần bọc bất cứ thứ gì không chiếm không gian (ansi-escapes) \[ \], vì vậy bạn không thể kết thúc tất cả các màu thoát ansi \]vì nếu không có \[. Khi bạn đặt các ký tự không in được, bạn chỉ nên bọc chúng vào \[ \](ví dụ PS1='\[\e[32;1m\] green prompt \[\e[0m\] $').
dylnmc

Thật! Nếu không mở \ [, điều này sẽ nhắc nhở người dùng linux của chúng tôi. Có lẽ nó khác với OSX? Cách kỳ lạ. \ [và \ e [được hiểu là hai thứ khác nhau cho linux. Dấu hiệu đầu tiên cho biết bash rằng chuỗi sau không thể in được và không tính nó là một phần của các ký tự được hiển thị của dấu nhắc. \ E [là khung thoát để bắt đầu sơ đồ màu ANSI.
Alex Summers

0

Giải pháp ưa thích của tôi cho vấn đề chồng chéo dài trong bash PS1 là có một dòng \nở cuối dòng nhắc PS1.

ví dụ

nhập mô tả hình ảnh ở đây

Nếu bạn muốn tất cả những thứ khác của tôi - thời gian, người dùng, máy chủ lưu trữ, thư mục và chi nhánh git (!), Bạn có thể sử dụng công cụ này (mac hoặc linux):

/unix//a/124012/10043


cho chi nhánh git bạn nên sử dụng if [[ $(git rev-parse --is-inside-git-dir 2> /dev/null) ]]; then branch="$( git symbolic-ref --short -q HEAD 2> /dev/null )"; fi. Đây là một tiêu chuẩn khi đưa git vào một tập lệnh và đánh giá tên chi nhánh từ những gì tôi đã đọc trước đó.
dylnmc
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.