Bagaimana cara membuat tampilan terminal pengguna @ mesin dalam huruf tebal?

31

Saya telah melihat di beberapa cuplikan layar (tidak ingat di mana di web) bahwa terminal dapat menampilkan [username@machine /]$huruf tebal. Saya berharap untuk mendapatkan ini juga karena saya selalu menemukan diri saya menggulir output panjang untuk mencari tahu dengan kesulitan baris pertama setelah perintah saya.

Bagaimana saya bisa membuat nama pengguna dll. Tebal atau berwarna?

Benjamin
sumber
Bisakah Anda mengklarifikasi jika Anda menggunakan bash shell atau shell lain?
Stephen Quan
Gnome Terminal bash.
Benjamin

Jawaban:

22

Anda harus dapat melakukan ini dengan mengatur PS1variabel prompt di ~/.bashrcfile Anda seperti ini:

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

Untuk membuatnya berwarna (dan mungkin tebal - ini tergantung pada apakah emulator terminal Anda telah mengaktifkannya), Anda perlu menambahkan kode warna escape:

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

Di sini, segala sesuatu yang tidak luput antara bagian 1;91mdan 0makan diwarnai dalam 1;91warna (merah tebal). Letakkan kode pelarian ini di sekitar bagian yang berbeda dari prompt untuk menggunakan warna yang berbeda, tapi ingat untuk mengatur ulang warna dengan 0matau Anda akan memiliki keluaran terminal berwarna. Ingatlah untuk mencari file setelahnya untuk memperbarui shell saat ini:source ~/.bashrc


sumber
Mengapa tidak menggunakan 31 untuk merah? 91 sepertinya bukan kode standar.
jw013
1
@ jw013 Kisaran 90-97 setara dengan kisaran 30-37 jika digunakan sebagai huruf tebal yaitu 1;31dan 1;91. Menggunakan bobot font normal, kisaran 90-97 memberikan warna yang lebih cerah daripada yang lain.
45

Temukan tempat Anda PS1diatur di .bashrcdan masukkan '\[\e[1m\]'di awal dan \[\e[0m\]di akhir.

  • \[dan \]diperlukan agar shell tahu kekacauan di dalamnya memakan 0 ruang di layar, yang mencegah beberapa perilaku kacau ketika melakukan pengeditan baris. Anda tidak perlu terlalu khawatir tentang hal itu.
  • \e[dikenal sebagai CSI (pengontrol urutan pengantar). Anda akan melihatnya digunakan di sebagian besar kode yang tercantum pada halaman Wikipedia yang dirujuk. \e berarti karakter pelarian.
  • Jika Anda melihat pada tabel SGR pada halaman Wikipedia, Anda akan melihat 1 adalah angka untuk teks terang / tebal, dan 0 untuk reset. Dengan demikian CSI 1mnyalakan huruf tebal dan CSI 0matur ulang font sehingga sisa teks Anda normal.

Wikipedia memiliki daftar lengkap kode pelarian ANSI yang dapat Anda gunakan jika emulator terminal Anda mendukungnya.

Edit

Untuk portabilitas dan keterbacaan, Anda harus menggunakan tputalih-alih kode melarikan diri hard-coding. Satu-satunya downside adalah tputpendekatan tidak akan bekerja dengan terminal yang mendukung kode ANSI tetapi memiliki database terminfo rusak atau hilang, tetapi dalam kasus itu terminfo rusak adalah masalah yang lebih besar karena banyak aplikasi konsol Anda yang bergantung pada terminfo mungkin tidak berfungsi dengan baik.

Berikut ini contoh dari apa yang saya lakukan di .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\] "

Inilah yang akan terlihat seperti versi generik saya. Ini 0adalah status keluar dari perintah terakhir.

Tangkapan layar PS1

jw013
sumber
Jawaban yang bagus dan jelas, +1. Namun saya masih menemukan jawaban hesse lebih tepatnya, jadi saya memilihnya.
Benjamin
Ketika saya mencoba ini, saya mengalami masalah seperti Terminal prompt tidak membungkus dengan benar . Apakah kamu? Apakah Anda telah memperbarui urutan pelarian?
Stefan Lasiewski
6

Ini adalah prompt default yang Anda dapatkan di cygwin bash shell:

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

masukkan deskripsi gambar di sini

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

Referensi:

Stephen Quan
sumber
Bagus, saya menambahkan baris baru sebelum [user @ host] yang membuat setiap perintah lebih mudah dibaca (harus diatur secara default pada terminal imo).
Benjamin
2

Saya menggunakan fungsi shell ini untuk mendapatkan atribut teks di 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
}

Kemudian untuk menggunakannya:

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

Ini memberi saya di [username@hostname]:cwd>mana username@hostnamehijau tebal dan cwdbiru tebal.

Arcege
sumber
Terima kasih untuk ini. Saya kira saya juga harus menyalin semua hal di atas ~/.bashrc?
Benjamin
Ya, saya mengaturnya di ~/.bashrcfile saya dan menggunakannya untuk mengatur prompt saya. Saya bahkan mengubah warna tergantung pada sistem saya aktif.
Arcege
1

Agar terlihat seperti prompt Ubuntu default, tambahkan

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

di Anda ~/.bashrc.

Ini akan menghasilkan hijau yang terkenal user@host(tebal), diikuti oleh titik putih putih yang tidak tebal, diikuti oleh direktori kerja Anda dalam warna biru tebal, diikuti oleh $tanda, spasi, dan perintah Anda dalam huruf putih tidak tebal:

Ubuntu Bash prompt

Tobias Feil
sumber