Bagaimana cara menyesuaikan .bashrc untuk mengkonfigurasi prompt perintah?

8

Apakah ada cara mudah untuk mengubah Bash prompt saya untuk memodifikasi warna dan teks apa yang ditampilkan? Saya pernah mendengar bahwa ini dilakukan .bashrc, tetapi saya belum menemukan cara yang bagus dan mudah untuk memodifikasinya. Bagaimana warna diungkapkan dalam Bash?

Naftuli Kay
sumber
Pastikan untuk menjelajah bash+prompt, meskipun saya pikir kami tidak memiliki tutorial di sana.
Gilles 'SANGAT berhenti menjadi jahat'
2
Ada panduan yang bagus untuk menyiapkan prompt bash warna di wiki Arch Linux , termasuk daftar warna dan beberapa contoh bagus.
jasonwryan

Jawaban:

4

Saya dulu pernah memiliki yang didefinisikan dalam .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

Anda kemudian dapat menggunakannya misalnya dengan:

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

Ini dapat membantu Anda.

Alasan saya membuatnya menjadi fungsi daripada variabel adalah kemalasan. Saya hanya ingin berhenti mengetik. Tentu saja jika Anda mencari variabel efisiensi akan lebih baik.

Pada akhir hari meskipun ini hanya cocok dengan terminal tertentu. Jadi untuk bantuan apa pun bacalah dokumentasi terminal Anda, bukan bash atau shell lain dalam hal ini.

pindahkan
sumber
Salah satu definisi bashrc terbaik yang pernah saya lihat sampai sekarang!
theTuxRacer
1
Variabel akan menghemat saat mengetik: bright=$'\e1m'dan seterusnya. (Kecuali jika Anda memerlukan kompatibilitas dengan versi yang sangat lama yang tidak memiliki $'…'sintaks.)
Gilles 'SO-stop being evil'
@Gilles, Anda salah paham: Saya lebih suka mengetikkan blueprompt (atau dalam skrip shell) daripada echo $blue.
asoundmove
2

Bash menggunakan skema warna Ansi - artikel Wikipedia: http://en.wikipedia.org/wiki/ANSI_escape_code#Colors

Sebagai contoh, inilah prompt saya: (Saya suka prompt saya pada baris terpisah, tetapi tidak semua orang. Selain itu, istilah saya memiliki latar belakang gelap - sesuaikan warna jika persyaratan Anda terang.)

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

Nilai prompt khusus dijelaskan dalam halaman Bash di bawah "Prompting":

\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 $
LenW
sumber
1
Bash tidak menggunakan skema warna ansi. Ini adalah terminal yang mengimplementasikan kode pelarian. Bash akan bekerja pada terminal apa pun, jadi mungkin yang terbaik adalah menggunakan tput setf _n_kode melarikan diri untuk mengatur warna latar depan.
camh
0

misalnya untuk mewarnai Anda dapat melakukan ini:

Cukup tambahkan baris berikut:

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

Pratinjau: masukkan deskripsi gambar di sini

Ini warna pilihan saya. Anda dapat menyesuaikan setiap bagian dari warna prompt dengan mengubah mkode (misalnya 34m) yang merupakan kode warna ANSI.

Daftar kode warna ANSI:

  • Hitam: 30m
  • Merah: 31m
  • Hijau: 32m
  • Kuning: 33m
  • Biru: 34m
  • Ungu: 35m
  • Cyan: 36m
  • Putih: 37m
Shayan Amani
sumber
0

Tidak satu pun dari jawaban ini yang membantu saya mempelajari cara kerja kustomisasi yang cepat. Inilah yang saya kumpulkan dari beberapa jam mencari di berbagai forum, tumpukan, wiki, dll:

Temukan prompt Anda

nano ~/.bashrc

Cari Anda bashrcuntuk PS1, baik secara manual atau dengan Alt + F . Ini adalah bash prompt pertama, apa yang Anda lihat ketika Anda bisa memasukkan perintah. PS[2-4]juga ada, tetapi itu jarang digunakan.

Tentukan warna

Di atas PS1garis Anda, tambahkan definisi warna ini:

# 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

Konfigurasikan warna

Sekarang, di terminal Anda (mungkin grafis), Anda harus memiliki beberapa opsi penyesuaian. Sebagai contoh, saya menggunakan Konsole KDE : Settings > Edit Current Profile... > Appearance > Edit...menunjukkan antarmuka penyesuaian ini:

Kustomisasi warna konsole

Sekarang ubah ke warna apa pun yang Anda suka. Latar depan Anda adalah warna default Anda, dan Warna 1 ~ 8 adalah yang Anda tentukan yang dapat Anda pilih. Bukan berarti definisi tersebut berbasis 0 saat penyesuaian ini dan variabel Anda berbasis 1.

Gunakan warna pada prompt Anda

Untuk prompt default saya, saya punya:

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

\uadalah Anda u sername, \hadalah Anda h ostname, \Wadalah W di sini Anda (yang direktori), dan \$adalah thingy prompt ( #ketika userid = 0 [root]).

Anda dapat menyesuaikan ini dengan menambahkan $c1, $ c2`, dll. Di depan warna yang ingin Anda ubah. Sebagai contoh, saya punya:

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

Ini menghasilkan:

Bash prompt saya

Catatan: Anda harus menggunakan NCdi akhir untuk mengatur ulang ke warna default Anda, atau semuanya setelah prompt Anda (input Anda) akan menjadi apa pun warna terakhir dalam prompt Anda.

Raymo111
sumber