Làm thế nào để làm cho thiết bị đầu cuối hiển thị người dùng @ máy bằng chữ in đậm?


31

Tôi đã thấy trong một số ảnh chụp màn hình (không thể nhớ vị trí trên web) mà thiết bị đầu cuối có thể hiển thị [username@machine /]$chữ in đậm. Tôi cũng mong muốn nhận được điều này bởi vì tôi luôn thấy mình cuộn qua các đầu ra dài để tìm ra khó khăn ở dòng đầu tiên sau lệnh của tôi.

Làm thế nào tôi có thể làm cho tên người dùng vv đậm hoặc màu?


Bạn có thể làm rõ nếu bạn đang sử dụng bash shell hoặc một số shell khác?
Stephen Quan

Gnome Terminal bash.
Benjamin

Câu trả lời:


22

Bạn sẽ có thể làm điều này bằng cách đặt PS1biến nhắc trong ~/.bashrctệp của bạn như thế này:

PS1='[\u@\h \w]\$ '

Để làm cho nó có màu (và có thể đậm - điều này phụ thuộc vào việc trình giả lập thiết bị đầu cuối của bạn có bật nó hay không), bạn cần thêm mã màu thoát:

PS1='\[\e[1;91m\][\u@\h \w]\$\[\e[0m\] '

Ở đây, mọi thứ không được thoát giữa 1;91m0mcác bộ phận sẽ được tô 1;91màu (tô đậm màu đỏ). Đặt các mã thoát này xung quanh các phần khác nhau của dấu nhắc để sử dụng các màu khác nhau, nhưng hãy nhớ đặt lại màu với 0mnếu không bạn cũng sẽ có đầu ra màu cuối. Nhớ nguồn tệp sau đó để cập nhật shell hiện tại:source ~/.bashrc


Tại sao không sử dụng 31 cho màu đỏ? 91 dường như không phải là một mã tiêu chuẩn.
jw013

1
@ jw013 Phạm vi 90-97 tương đương với phạm vi 30-37 nếu được sử dụng như in đậm 1;311;91. Sử dụng trọng lượng phông chữ bình thường, phạm vi 90-97 cho màu sắc sáng hơn các màu khác.

45

Tìm vị trí của bạn PS1được đặt trong của bạn .bashrcvà chèn '\[\e[1m\]'vào đầu và \[\e[0m\]cuối.

  • \[\]là cần thiết để shell biết được mớ hỗn độn bên trong chiếm 0 không gian trên màn hình, điều này ngăn chặn một số hành vi sai lầm khi thực hiện chỉnh sửa dòng. Bạn không cần phải lo lắng quá nhiều về nó.
  • \e[được gọi là CSI (giới thiệu trình tự điều khiển). Bạn sẽ thấy nó được sử dụng trong hầu hết các mã được liệt kê trên trang Wikipedia được tham chiếu. \e nghĩa là nhân vật thoát hiểm.
  • Nếu bạn nhìn vào bảng SGR trên trang Wikipedia, bạn sẽ thấy 1 là số cho văn bản sáng / đậm và 0 là để đặt lại. Do đó, CSI 1mbật đậm và CSI 0mđặt lại phông chữ để phần còn lại của văn bản của bạn bình thường.

Wikipedia có một danh sách đầy đủ các mã thoát ANSI mà bạn có thể sử dụng nếu trình giả lập thiết bị đầu cuối của bạn hỗ trợ nó.

Chỉnh sửa

Đối với tính di động và dễ đọc, bạn nên sử dụng tputthay vì mã thoát mã hóa cứng. Nhược điểm duy nhất là tputcách tiếp cận sẽ không hoạt động với các thiết bị đầu cuối hỗ trợ mã ANSI nhưng bị hỏng hoặc thiếu cơ sở dữ liệu terminfo, nhưng trong trường hợp đó, terminfo bị hỏng là một vấn đề lớn hơn vì nhiều ứng dụng bảng điều khiển của bạn dựa trên terminfo có thể không hoạt động chính xác.

Đây là một ví dụ về những gì tôi làm trong .bashrc:

# color names for readibility
reset=$(tput sgr0)
bold=$(tput bold)
black=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
magenta=$(tput setaf 5)
cyan=$(tput setaf 6)
white=$(tput setaf 7)
user_color=$green
[ "$UID" -eq 0 ] && { user_color=$red; }
PS1="\[$reset\][\[$cyan\]\A\[$reset\]]\[$user_color\]\u@\h(\l)\
\[$white\]:\[$blue\]\W\[$reset\][\[$yellow\]\$?\[$reset\]]\[$white\]\
\\$\[$reset\] "

Đây là một phiên bản chung của tôi sẽ trông như thế nào. Đây 0là trạng thái thoát của lệnh cuối cùng.

Ảnh chụp màn hình PS1


Câu trả lời hay và giải thích, +1. Tuy nhiên tôi thấy Hesse câu trả lời của hơn vào vấn đề, vì vậy tôi đã chọn nó để thay thế.
Benjamin

Khi tôi thử điều này, tôi gặp phải một vấn đề như Terminal prompt không gói chính xác . Phải không Bạn đã cập nhật trình tự thoát?
Stefan Lasiewski

6

Đây là lời nhắc mặc định mà bạn nhận được trong cygwin bash shell:

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '

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

\[\e]0;\w\a\] = Set the Window title to your current working directory
\n            = new line
\[\e[32m\]    = Set text color to green
\u@\h         = display username@hostname
\[\e[33m\]    = Set text color to yellow
\w            = display working directory
\[\e[0m\]     = Reset text color to default
\n            = new line
\$            = display $ prompt

Tài liệu tham khảo:


Thật tuyệt, tôi đã thêm một dòng mới trước [user @ host] , điều này làm cho mỗi lệnh dễ đọc hơn (nên được đặt theo mặc định trên thiết bị đầu cuối imo).
Benjamin

2

Tôi sử dụng hàm shell này để lấy các thuộc tính văn bản trong terminal:

color () {
  if [ -z "$1" -a -z "$2" -a -z "$3" ]; then
    echo "\033[0m"
    return
  fi
  case $1 in
    black)   color_fg=30;;
    red)     color_fg=31;;
    green)   color_fg=32;;
    yellow)  color_fg=33;;
    blue)    color_fg=34;;
    magenta|purple) color_fg=35;;
    cyan)    color_fg=36;;
    white)   color_fg=37;;
    -)       color_fg='';;
    *)       color_fg=39;;
  esac
  case $2 in
    bold)      color_bd=1;;
    italics)   color_bd=3;;
    underline) color_bd=4;;
    inverse)   color_bd=7;;
    strike)    color_bd=9;;
    nobold)      color_bd=22;;
    noitalics)   color_bd=23;;
    nounderline) color_bd=24;;
    noinverse)   color_bd=27;;
    nostrike)    color_bd=29;;
    -)         color_bd='';;
    *)         color_bd=0
  esac
  case $3 in
    black)   color_bg=40;;
    red)     color_bg=41;;
    green)   color_bg=42;;
    yellow)  color_bg=43;;
    blue)    color_bg=44;;
    magenta|purple) color_bg=45;;
    cyan)    color_bg=46;;
    white)   color_bg=47;;
    -)       color_bg='';;
    *)       color_bg=49;;
  esac
  s='\033['
  if [ -n "$color_bd" ]; then
    s="${s}${color_bd}"
    if [ -n "$color_fg" -o -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_fg" ]; then
    s="${s}${color_fg}"
    if [ -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_bg" ]; then
    s="${s}${color_bg}"
  fi
  s="${s}m"
  echo "$s"
  unset s color_bd color_bg color_fg
}

Sau đó, để sử dụng nó:

color_reset=`color`
color_grbd=`color green bold`
color_bubd=`color blue bold`
PS1="\[${color_grbd}\][\u@\h]\[${color_reset}\]:\[$color_budb}\]\w\[${color_reset}\]> "

Điều này mang lại cho tôi [username@hostname]:cwd>nơi username@hostnamecó màu xanh đậm và cwdmàu xanh đậm.


Cảm ơn vì điều đó. Tôi cho rằng tôi cũng phải sao chép tất cả những điều trên ~/.bashrc?
Benjamin

Có, tôi đặt nó trong ~/.bashrctập tin của mình và sử dụng nó để đặt lời nhắc. Tôi thậm chí thay đổi màu sắc tùy thuộc vào hệ thống tôi đang bật.
Arcege

1

Để làm cho nó trông giống như một dấu nhắc Ubuntu mặc định, hãy thêm

export PS1='\[\e[1;32m\]\u@\h\e[0;39m\]:\e[1;34m\]\w\e[0;39m\]$\[\e[0m\] '

trong của bạn ~/.bashrc.

Điều này sẽ tạo ra màu xanh lá cây nổi tiếng user@host(đậm), theo sau là dấu hai chấm màu trắng không đậm, tiếp theo là thư mục làm việc của bạn có màu xanh đậm, theo sau là một $dấu hiệu, khoảng trắng và lệnh của bạn bằng các chữ màu trắng không đậm:

Dấu nhắc Ubuntu Bash

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.