Mempertahankan warna bash prompt saat memulai sesi layar

11

Ketika saya ssh ke kotak Lucid Ubuntu prompt cukup cantik, dengan warna. Semuanya standar, sejauh yang saya tahu. Ini layar luar $ PS1 saya:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@dev\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$

Sebelum menghubungkan dengan layar

Tapi kemudian begitu saya memulai layar warna pergi. Segala sesuatu yang lain baik-baik saja, dan layar saya dapat mendukung warna (perhatikan bahwa .dan ..ini ls -alberwarna biru) tetapi promptnya tidak. Secara teori semuanya harus persis sama. $ PS1 di dalam layar:

${debian_chroot:+($debian_chroot)}\u@dev:\w\$

setelah pemutaran

EDIT: Ini hanya layar vanilla biasa.

chmullig
sumber
Apakah ini layar vanila biasa, atau Anda sudah menginstal byobu? (Meskipun hal ini tidak masalah.)
belacqua
2
Apakah echo $PS1mencetak hal yang sama di dalam layar dan di luar layar?
Mikel
$ PS1 memang berbeda. Pertanyaan yang diedit untuk memasukkan itu.
chmullig

Jawaban:

16

Anda dapat mengedit baris berikut di .bashrc Anda (ini # 39 di .bashrc saya):

#force_color_prompt=yes

Mengubah:

force_color_prompt=yes

Ini mungkin mengganggu jika Anda masuk dari suatu tempat di mana warna tidak didukung, tetapi saya merasa sangat tidak mungkin.

LasseValentini
sumber
Sempurna, itu berhasil untukku. Saya bisa melihatnya bermasalah jika saya login dari suatu tempat tanpa warna, tapi itu akan sangat langka. Terima kasih!
chmullig
Perubahan perlu dilakukan pada mesin server, bukan klien.
Adam Ryczkowski
3

The .screenrcfile adalah misteri bagi saya. Milik saya adalah resep yang saya copypasta dari internet. Namun, saya melihat beberapa baris yang tampaknya relevan dengan masalah Anda:

# terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I" 
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'

Saya pikir jika Anda menambahkan garis di atas ke garis Anda, Anda akan mendapatkan warna. Inilah keseluruhan .screenrcreferensi saya:

jake@daedalus:~$ cat .screenrc 
startup_message off # skip splash screen
vbell off # Kill the annoying dog

# Voodoo
hardstatus alwayslastline
hardstatus string '%{= wk}%-Lw%{= KW}%50>%n%f* %t%{= dK}%+Lw%<'

# terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I" 
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
# erase background with current bg color 
defbce "on"
djeikyb
sumber
2

PS1Pengaturan Anda harus ditempatkan .bashrc, bukan .bash_profile.

Jika bukan itu masalahnya, harap edit pertanyaan Anda untuk memasukkan baris yang telah Anda setel PS1.

Anda juga dapat mencoba menjalankan ini:

echo "$TERM"                                 # will probably print "screen"
tput setaf 2 | cat -vte                      # should print "^[[32m"
echo "$(tput setaf 2)"green"$(tput sgr0)"    # should print "green" in green
Mikel
sumber
2

Layar biasanya menggunakan tipe terminal khusus, seperti "layar", atau jika Anda mengaturnya di .screenrc, "screen-256color".

Lihat saja .bashrc Anda untuk pernyataan kasus deteksi warna dan tambahkan layar ke daftar.

Misalnya, sesuatu seperti ini:

case "$TERM" in
    xterm)
        color_prompt=yes
        ;;
    screen)
        color_prompt=yes
        ;;
    *256*) 
        color_prompt=yes
        ;;
esac

Saya menggunakan jenis terminal 256-warna, jadi saya hanya perlu pernyataan kasus 256 , karena ia menangkap xterm-256color, gnome-256color, dan screen-256color. Jarak tempuh Anda mungkin beragam. 🙂

m0j0
sumber
1

Tambahkan ini ke ~ / .screenrc Anda

shell -$SHELL
Cam
sumber
+1. Ini membuat saya kembali ke bash prompt saya yang bagus di OS X.
funroll
0

Meminta layar dengan -T xtermkarya untuk saya, jadi cukup:

screen -T xterm

Tidak perlu memodifikasi file apa pun.

petani anak
sumber