Làm cách nào để tùy chỉnh .bashrc để cấu hình dấu nhắc lệnh?


8

Có cách nào dễ dàng để thay đổi dấu nhắc Bash của tôi để sửa đổi màu sắc và văn bản nào được hiển thị không? Tôi đã nghe nói rằng điều này được thực hiện .bashrc, nhưng tôi chưa tìm thấy bất kỳ cách dễ dàng, sửa đổi nào. Màu sắc được thể hiện như thế nào trong Bash?


Hãy chắc chắn duyệt bash+prompt, mặc dù tôi không nghĩ rằng chúng tôi có một hướng dẫn trong đó.
Gilles 'SO- ngừng trở nên xấu xa'

2
Có một hướng dẫn tốt để thiết lập lời nhắc bash màu trên wiki Arch Linux , bao gồm danh sách các màu và một số ví dụ hay.
jasonwryan

Câu trả lời:


4

Tôi đã từng có những định nghĩa trong .bashrc:

export e="\e["

function cls          { echo -n "${e}H${e}J${e}0m"; }
function rcls         { echo -n "${e}H${e}J${e}S${e}H${e}J${e}0m${e}u${e}J"; } # not quite yet !
# rcls only works when no funny codes have been issued in between, i.e. the buffer is clean
# below the current screen. And then there can be issues with the first line of the buffer.

function bright       { echo -n "${e}1m"; }
function normal       { echo -n "${e}0m"; }
function colour       { echo -n "${e}$1;$2;$3m"; }
function black        { echo -n "${e}30m"; }
function bg_black     { echo -n "${e}40m"; }
function red          { echo -n "${e}31m"; }
function bg_red       { echo -n "${e}41m"; }
function green        { echo -n "${e}32m"; }
function bg_green     { echo -n "${e}42m"; }
function yellow       { echo -n "${e}33m"; }
function bg_yellow    { echo -n "${e}43m"; }
function blue         { echo -n "${e}34m"; }
function bg_blue      { echo -n "${e}44m"; }
function magenta      { echo -n "${e}35m"; }
function bg_magenta   { echo -n "${e}45m"; }
function cyan         { echo -n "${e}36m"; }
function bg_cyan      { echo -n "${e}46m"; }
function white        { echo -n "${e}37m"; }
function bg_white     { echo -n "${e}47m"; }
function c_up         { echo -n "${e}$1A"; }
function c_down       { echo -n "${e}$1B"; }    # within
function c_right      { echo -n "${e}$1C"; }
function c_left       { echo -n "${e}$1D"; }    # screen
function c_pos        { echo -n "${e}$1;$2f"; } # [Hf]
function c_line       { echo -n "${e}$1d"; }
function screentop    { echo -n "${e}H"; }      # [Hdf]
function linetop      { echo -n "${e}G"; }
function buffertop    { echo -n "${e}u"; }      # depends on other control characters ?
function tab          { echo -n "${e}I"; }
function backtab      { echo -n "${e}Z"; }
function scrolldown   { echo -n "${e}$1T"; }    # within screen
function scrolldown_B { echo -n "${e}$1L"; }    # scroll down below cursor
function scrollup_B   { echo -n "${e}$1M"; }    # scroll up below cursor
function clear        { echo -n "${e}J"; }      # delete to end of screen
function cleanbuffer  { echo -n "${e}S"; }      # copies first screen to bottom and clears
                                                # everything else above the cursor.
#function xxx { echo -n "${e}xxx"; }

export -f bright normal colour
export -f black bg_black red bg_red green bg_green yellow bg_yellow
export -f blue bg_blue magenta bg_magenta cyan bg_cyan white bg_white
export -f c_up c_down c_right c_left c_pos c_line
export -f screentop linetop buffertop tab backtab
export -f scrolldown scrolldown_B scrollup_B clear cleanbuffer

Sau đó, bạn có thể sử dụng chúng ví dụ với:

PS1_init="\n$(bright)$(black)$(hostname):\w\n$(bg_blue)"
PS1_end="$(normal)$(bright)\n\! -> $(normal)$(clear)"
export PS1="$PS1_init"'$(date)'"$PS1_end"

Đây có thể giúp bạn.

Lý do tôi biến chúng thành các hàm thay vì các biến là sự lười biếng. Tôi chỉ muốn cắt ra để gõ. Tất nhiên nếu bạn tìm kiếm các biến hiệu quả sẽ tốt hơn.

Vào cuối ngày mặc dù những điều này chỉ phù hợp với thiết bị đầu cuối nhất định. Vì vậy, đối với bất kỳ trợ giúp tham khảo tài liệu thiết bị đầu cuối của bạn, không phải là bash hoặc bất kỳ vỏ khác cho vấn đề đó.


Một trong những định nghĩa bashrc tốt nhất mà tôi đã thấy cho đến bây giờ!
theTuxRacer

1
Các biến sẽ tiết kiệm khi gõ: bright=$'\e1m'vân vân. (Trừ khi bạn cần khả năng tương thích với các phiên bản rất cũ không có $'…'cú pháp.)
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles, bạn đã hiểu nhầm: Tôi thích gõ bluetại dấu nhắc (hoặc trong tập lệnh shell) hơn echo $blue.
asoundmove

2

Bash sử dụng bảng màu Ansi - Bài viết Wikipedia: http://en.wikipedia.org/wiki/ANSI_escape_code#Colors

Ví dụ: đây là lời nhắc của tôi: (Tôi thích lời nhắc của tôi trên một dòng riêng biệt, nhưng không phải ai cũng làm. Ngoài ra, các điều khoản của tôi có nền tối - điều chỉnh màu nếu các điều khoản của bạn sáng.)

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[31m\]\h \[\e[0;36m\]\t \[\e[93m\]\w\[\e[36m\] p$$-\!-\$\[\e[0m\]\n\$ '

Các giá trị nhắc đặc biệt được mô tả trong trang chủ Bash trong "Nhắc":

\u  the username of the current user
\h  the hostname up to the first `.'
\t  the current time in 24-hour HH:MM:SS format
\w  the current working  directory,  with 
    $HOME  abbreviated with  a tilde
    (uses the value of the PROMPT_DIRTRIM variable)
$$  PID of the Bash (helps distinguish my many terms.
    Useful, eg, if I have to kill something.
\!  the history number of this command
\n     newline
\$  if the effective UID is 0, a #, otherwise a $

1
Bash không sử dụng bảng màu ansi. Đây là thiết bị đầu cuối thực hiện các mã thoát. Bash sẽ hoạt động trên bất kỳ thiết bị đầu cuối nào, vì vậy tốt nhất nên sử dụng tput setf _n_để lấy mã thoát để đặt màu nền trước.
camh

0

ví dụ để tô màu bạn có thể làm điều này:

Chỉ cần thêm dòng sau:

export PS1=" \[\033[34m\]\u@\h \[\033[33m\]\w\[\033[31m\]\[\033[00m\] $ "

Xem trước: nhập mô tả hình ảnh ở đây

Đây là màu sắc ưa thích của tôi. Bạn có thể tùy chỉnh từng phần màu của dấu nhắc bằng cách thay đổi mmã (ví dụ 34m) là mã màu ANSI.

Danh sách mã màu ANSI:

  • Đen: 30m
  • Đỏ: 31m
  • Màu xanh lá cây: 32m
  • Vàng: 33m
  • Màu xanh: 34m
  • Màu tím: 35m
  • Lục lam: 36m
  • Trắng: 37m

0

Không có câu trả lời nào trong số này giúp tôi tìm hiểu cách thức tùy biến nhanh chóng hoạt động. Đây là những gì tôi đã thu thập được sau vài giờ tìm kiếm trên nhiều diễn đàn khác nhau, Stacks, wiki, v.v.

Tìm lời nhắc của bạn

nano ~/.bashrc

Tìm kiếm của bạn bashrccho PS1, hoặc bằng tay hoặc với Alt + F . Đây là dấu nhắc bash đầu tiên, những gì bạn thấy khi bạn nhập lệnh. PS[2-4]cũng tồn tại, nhưng những thứ đó hiếm khi được sử dụng.

Xác định màu sắc

Trên PS1dòng của bạn, thêm các định nghĩa màu sau:

# Color Variables
c1='\[\033[0;30m\]' # Non-bold color 1
C1='\[\033[1;30m\]' # Bold color 1
c2='\[\033[0;31m\]' # Non-bold color 2
C2='\[\033[1;31m\]' # Bold color 2
c3='\[\033[0;32m\]' # Non-bold color 3
C3='\[\033[1;32m\]' # Bold color 3
c4='\[\033[0;33m\]' # Non-bold color 4
C4='\[\033[1;33m\]' # Bold color 4
c5='\[\033[0;34m\]' # Non-bold color 5
C5='\[\033[1;34m\]' # Bold color 5
c6='\[\033[0;35m\]' # Non-bold color 6
C6='\[\033[1;35m\]' # Bold color 6
c7='\[\033[0;36m\]' # Non-bold color 7
C7='\[\033[1;36m\]' # Bold color 7
c8='\[\033[0;37m\]' # Non-bold color 8
C8='\[\033[1;37m\]' # Bold color 8
NC='\[\033[0m\]'    # Back to default color

Cấu hình màu

Bây giờ, trong một số thiết bị đầu cuối (có lẽ là đồ họa) của bạn, bạn nên có một số tùy chọn tùy chỉnh. Ví dụ: tôi đang sử dụng Konsole Konsole : Settings > Edit Current Profile... > Appearance > Edit...hiển thị giao diện tùy chỉnh này:

Tùy chỉnh màu sắc Konsole

Bây giờ thay đổi những thứ này thành bất cứ màu nào bạn thích. Tiền cảnh của bạn là màu mặc định của bạn và Màu 1 ~ 8 là màu bạn đã xác định mà bạn có thể chọn. Không phải là các định nghĩa dựa trên 0 trong khi tùy chỉnh này và các biến của bạn là dựa trên 1.

Sử dụng màu sắc trong lời nhắc của bạn

Đối với lời nhắc mặc định của tôi, tôi có:

PS1="[\u@\h \W]\$ "

\ulà bạn u sername, \hlà bạn h ostname, \WW ở đây bạn (mà thư mục), và \$là thingy prompt ( #khi userid = 0 [root]).

Bạn có thể tùy chỉnh điều này bằng cách thêm $c1, $ c2`, v.v. vào phía trước màu bạn muốn thay đổi. Ví dụ: tôi có:

PS1="$c2[$C8\u$c2@$C7\h $C6\W$c2]$C2\$$NC "

Kết quả này trong:

Dấu nhắc của tôi

Lưu ý: Bạn cần sử dụng NCở cuối để đặt lại về màu mặc định hoặc mọi thứ khác sau dấu nhắc của bạn (đầu vào của bạn) sẽ là bất cứ màu nào trong dấu nhắc của bạn.

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.