Thay đổi màu của một chữ cái cụ thể trong tên người dùng trong bash's PS1


9

Tôi muốn thay đổi màu của một chữ cái cụ thể trong tên người dùng của tôi được hiển thị bởi PS1 trong bash.

Vd: Nếu \ulà của tôi rahul, tôi muốn bức thư hcó màu xanh lam và phần còn lại là màu trắng.

Tôi biết rằng \uđề cập đến tên người dùng và thêm màu vào toàn bộ 'thực thể' được thực hiện bằng cách thêm các thẻ như : [\033[38;5;15m\].

Nếu có thể, tôi có thể biết cách làm tương tự không.

Câu trả lời:


13

Nếu bạn không ngại không sử dụng \ulối thoát, bạn có thể làm như thế này:

PS1="\[\e[0;31m\]${USER:0:1}\[\e[m\]${USER:1} "

Điều này sẽ đặt lời nhắc chỉ tên người dùng và khoảng trắng. Ký tự đầu tiên của tên người dùng sẽ có màu đỏ. Điều này hoạt động bằng cách mở rộng $USERbiến hai lần với một phạm vi cụ thể. Lần đầu tiên phạm vi chỉ từ 0 đến 1. Lần thứ hai là từ 1 (ký tự thứ hai) đến hết.

Để nhận được lời nhắc như bạn yêu cầu, hãy sử dụng:

PS1="${USER:0:2}\[\e[0;34m\]${USER:2:1}\[\e[m\]${USER:3} "

1
Bạn chỉ có thể bỏ qua độ dài để in toàn bộ chuỗi bắt đầu bằng offset : ${USER:1}cho toàn bộ tên người dùng ngoại trừ ký tự đầu tiên. Giải pháp tốt đẹp! Bạn cũng có thể chỉ ra cách thay đổi màu của ký tự thứ ba, như OP yêu cầu không?
tráng miệng

1
Người ta có thể kiểm tra những thứ như vậy với echo -e, ví dụecho -e "${USER:0:2}\e[0;34m${USER:2:1}\e[m${USER:3} "
món tráng miệng

2
Điều này có phải làm việc với nhiều tên người dùng khác nhau không (ví dụ: làm nổi bật chữ cái thứ 3 cho mọi người)? Nếu nó chỉ dành cho bạn, một cách tiếp cận đơn giản hơn chỉ là mã hóa các chữ cái của tên người dùng của bạn, ví dụ rathay vì ${USER:0:2}, v.v.
egmont

@egmont hardcoding gần như không bao giờ là cách tốt nhất, nhưng thường phải thừa nhận đơn giản hơn nhiều. Bằng cách này, bạn có thể thả mã trong tệp cấu hình chung hoặc chia sẻ mã với người khác. Và nó xử lý trường hợp khi tài khoản của bạn được đổi tên.
Sebastian Stark

1
Cá nhân tôi chia sẻ cấu hình shell của riêng tôi giữa ba tài khoản được đặt tên khác nhau. Nhưng có lẽ chúng ta không nên đi vào triết học ở đây :)
Sebastian Stark
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.