วิธีทำให้เทอร์มินัลแสดง user @ machine เป็นตัวอักษรหนา


31

ฉันเคยเห็นในบางช็อตหน้าจอ (จำไม่ได้ว่าอยู่ที่ไหนบนเว็บ) ว่าเทอร์มินัลสามารถแสดง[username@machine /]$ตัวอักษรตัวหนา ฉันรอคอยที่จะได้รับสิ่งนี้เช่นกันเพราะฉันมักจะพบว่าตัวเองเลื่อนผ่านเอาต์พุตยาว ๆ เพื่อค้นหาบรรทัดแรกหลังจากคำสั่งของฉันลำบาก

ฉันจะทำให้ชื่อผู้ใช้เป็นตัวหนาและมีสีได้อย่างไร?


คุณช่วยอธิบายได้ไหมถ้าคุณใช้ bash shell หรือ shell อื่น ๆ ?
Stephen Quan

Gnome Terminal bash
เบนจามิน

คำตอบ:


22

คุณควรจะสามารถทำได้โดยการตั้งค่าPS1ตัวแปร prompt ใน~/.bashrcไฟล์ของคุณดังนี้:

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

ในการทำให้มีสี (และอาจเป็นตัวหนา - ขึ้นอยู่กับว่าเทอร์มินัลอีมูเลเตอร์ของคุณเปิดใช้งานหรือไม่) คุณต้องเพิ่มรหัสสี escape:

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

ที่นี่ทุกสิ่งที่ไม่ถูกหลบหนีระหว่าง1;91mและ0mส่วนต่างๆจะเป็น1;91สี (ตัวหนาสีแดง) ใส่รหัสหลีกเลี่ยงเหล่านี้รอบส่วนต่าง ๆ ของพรอมต์เพื่อใช้สีต่าง ๆ แต่อย่าลืมรีเซ็ตสีด้วย0mหรือไม่เช่นนั้นคุณจะมีเทอร์มินัลเอาท์พุทสีเช่นกัน อย่าลืมแหล่งไฟล์หลังจากนั้นเพื่อปรับปรุงเปลือกปัจจุบัน:source ~/.bashrc


ทำไมไม่ใช้ 31 กับสีแดง? 91 ดูเหมือนจะไม่ได้เป็นรหัสมาตรฐาน
jw013

1
@ jw013 ช่วง 90-97 เทียบเท่ากับช่วง 30-37 ถ้าใช้เป็นเช่นตัวหนาและ1;31 1;91การใช้น้ำหนักแบบอักษรปกติช่วง 90-97 จะให้สีที่สว่างกว่าสีอื่น ๆ

45

ค้นหาที่ของคุณ PS1ตั้งของคุณใน.bashrcและแทรก'\[\e[1m\]'ที่จุดเริ่มต้นและ\[\e[0m\]จุดสิ้นสุด

  • \[และ\]มีความจำเป็นดังนั้นเชลล์จึงรู้ว่ามีระเบียบอยู่ภายในใช้พื้นที่ 0 บนหน้าจอซึ่งจะป้องกันพฤติกรรมที่เกิดการเมาเมื่อทำการแก้ไขบรรทัด คุณไม่จำเป็นต้องกังวลมากเกินไป
  • \e[เป็นที่รู้จักในนาม CSI (ผู้แนะนำลำดับการควบคุม) คุณจะเห็นมันใช้ในรหัสส่วนใหญ่ที่ระบุไว้ในหน้า Wikipedia อ้างอิง \e หมายถึงตัวละครที่หลบหนี
  • หากคุณดูในตาราง SGR ในหน้า Wikipedia คุณจะเห็น 1 คือหมายเลขของข้อความที่สว่าง / ตัวหนาและ 0 สำหรับการรีเซ็ต ดังนั้นCSI 1mจะเปิดตัวหนาและCSI 0mรีเซ็ตแบบอักษรเพื่อให้ข้อความที่เหลือของคุณเป็นเรื่องปกติ

Wikipedia มีรายการรหัสหลบหนี ANSI ทั้งหมดที่คุณสามารถใช้ได้หากเทอร์มินัลอีมูเลเตอร์ของคุณรองรับ

แก้ไข

เพื่อความสะดวกในการพกพาและความสามารถในการอ่านคุณควรใช้tputแทนรหัสการเข้ารหัสฮาร์ดโค้ด ข้อเสียเพียงอย่างเดียวคือtputวิธีการใช้งานไม่ได้กับเทอร์มินัลที่สนับสนุนรหัส ANSI แต่มีฐานข้อมูล terminfo ที่เสียหายหรือขาดหายไป แต่ในกรณีนั้น terminfo ที่ใช้งานไม่ได้เป็นปัญหาที่ใหญ่กว่าเนื่องจากแอปคอนโซลของคุณ

นี่คือตัวอย่างของสิ่งที่ฉันทำในของฉัน.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\] "

นี่คือลักษณะทั่วไปของรุ่นของฉัน 0คือออกจากสถานะของคำสั่งสุดท้าย

ภาพหน้าจอ PS1


คำตอบที่ดีและอธิบายได้ +1 ถึงกระนั้นฉันก็พบว่าเฮสส์ตอบคำถามได้มากกว่าเดิมดังนั้นฉันจึงเลือกใช้แทน
เบนจามิน

เมื่อฉันพยายามนี้ผมวิ่งเข้าไปในปัญหาเช่นเทอร์มิพรอมต์ไม่ได้ตัดได้อย่างถูกต้อง คุณ คุณมีการปรับปรุงลำดับ escape หรือไม่?
Stefan Lasiewski

6

นี่เป็นพรอมต์เริ่มต้นที่คุณได้รับในเปลือกทุบ cygwin:

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

ป้อนคำอธิบายรูปภาพที่นี่

\[\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

อ้างอิง:


ดีฉันเพิ่มบรรทัดใหม่ก่อน[user @ host]ซึ่งทำให้แต่ละคำสั่งยังอ่านได้มากขึ้น (ควรตั้งค่าเริ่มต้นใน terminal imo)
เบนจามิน

2

ฉันใช้ฟังก์ชั่นเปลือกนี้เพื่อรับคุณลักษณะข้อความใน 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
}

จากนั้นให้ใช้:

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}\]> "

นี่ทำให้ฉัน[username@hostname]:cwd>อยู่ในที่ที่username@hostnameมีสีเขียวและcwdเป็นสีฟ้าที่เป็นตัวหนา


ขอบคุณสำหรับสิ่งนี้. ฉันคิดว่าฉันต้องคัดลอกข้อมูลทั้งหมดข้างต้นด้วย~/.bashrcหรือไม่
Benjamin

ใช่ฉันตั้งค่านั้นใน~/.bashrcไฟล์ของฉันและใช้เพื่อตั้งค่าพรอมต์ของฉัน ฉันยังเปลี่ยนสีตามระบบที่ฉันใช้ด้วย
Arcege

1

หากต้องการทำให้ดูเหมือนเป็นพรอมต์เริ่มต้นของ Ubuntu ให้เพิ่ม

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

~/.bashrcในของคุณ

สิ่งนี้จะสร้างสีเขียวที่รู้จักกันดีuser@host(ตัวหนา) ตามด้วยเครื่องหมายโคลอนสีขาวที่ไม่ใช่ตัวหนาตามด้วยไดเรกทอรีการทำงานของคุณในตัวหนาสีน้ำเงินตามด้วย$เครื่องหมายช่องว่างและคำสั่งของคุณเป็นตัวอักษรสีขาวที่ไม่ใช่ตัวหนา:

พรอมต์ Ubuntu Bash

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.