zsh
Thử đi:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Đây là một sự cố của lời nhắc:
- PROMPT_SUBST bật thay thế lệnh trong dấu nhắc (và mở rộng tham số và mở rộng số học)
%{...%}
- một chuỗi thoát
$(pwd|grep --color=always /)
- in thư mục hiện tại và tô sáng /
- màu sẽ phụ thuộc vào biến môi trường $ GREP_COLORS (hoặc giá trị mặc định của nó) - màu đỏ đậm là mặc định
%${#PWD}G
- sử dụng độ dài tính bằng tên của thư mục hiện tại làm giá trị trục trặc. Điều này làm cho shell xem đây là độ dài của chuỗi ký tự trước (sau " %{
") thay vì độ dài thực tế của chuỗi bao gồm các chuỗi thoát ANSI. Điều này giữ cho vỏ không bị nhầm lẫn về vị trí của con trỏ so với cuối dấu nhắc.
- - - - - - - đây là phần cuối của câu trả lời cho câu hỏi của bạn - - - - - - -
%(!.%F{red}.%F{cyan})
- nếu đây là một vỏ đặc quyền (gốc), đặt màu nền trước thành màu đỏ, nếu không thì màu lục lam
%n
- xuất tên người dùng
%f
- đặt lại màu nền trước về mặc định
@
- một chữ theo dấu
%F{yellow}
- làm cho màu nền trước màu vàng
%m
- xuất tên máy chủ
%f
- đặt lại màu nền trước về mặc định
%(!.%F{red}.)
- nếu đây là một vỏ đặc quyền (gốc), đặt màu nền trước thành màu đỏ
%#
- xuất ra một #
vỏ đặc quyền hoặc %
cho một vỏ không có đặc quyền
%f
- đặt lại màu nền trước về mặc định
Tôi đặt đường dẫn đầu tiên trong dấu nhắc này để nhấn mạnh, vì câu hỏi liên quan đến đường dẫn.
Đây là phiên bản dành cho zsh thay đổi màu gạch chéo tùy thuộc vào việc bạn có root (đặc quyền) hay không bằng cách thao tác $GREP_COLORS
biến:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|([[ $EUID == 0 ]] && GREP_COLORS="mt=01;31" grep --color=always /|| GREP_COLORS="mt=01;34" grep --color=always /))%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Bash
Bạn có thể làm một dấu nhắc tương tự trong Bash. Trong ví dụ này, tôi đã đặt tên người dùng và tên máy chủ lên trước và màu của dấu gạch chéo cũng thay đổi khi UID bằng 0. Cảnh báo: điều này ghi đè lên $PS1
biến nhắc của Bash . Đó không phải là vấn đề trừ khi bạn đang làm điều gì đó đặc biệt hoặc bạn mong muốn hành vi thay đổi khi bạn đặt biến đó trực tiếp và điều này có hiệu lực. Ngoài ra, điều này sử dụng một biến gọi là " usercolor
" có thể va chạm với một thứ khác, mặc dù toàn bộ điều này có thể được đặt trong một hàm và biến được khai báo cục bộ.
PROMPT_COMMAND='usercolor="\[\033[0;36m\]";[[ $EUID == 0 ]] && usercolor="\[\033[1;31m\]";PS1="$(pwd)";PS1="$usercolor\u\[\033[0m\]@\[\033[0;33m\]\h\[\033[0m\]:${PS1//\//$usercolor/\[\033[0m\]}$usercolor\\$\[\033[0m\] "'
Tôi đã lợi dụng thực tế là Bash không có tính năng "trục trặc" của zsh để sử dụng thay thế mở rộng tham số để tô màu một cách có điều kiện các dấu gạch chéo (thay vì sử dụng grep).