“Atur ulang” warna terminal setelah ssh keluar / keluar

21

Ketika saya ssh ke server jauh, saya suka warna terminal untuk berubah. Saya menggunakan settermfile ~ / .bashrc jarak jauh untuk menyelesaikannya. Namun, ketika saya exit, warna terminal tidak diatur ulang ke warna lokal.

Saya memecahkan masalah, tetapi saya tidak yakin apakah itu solusi terbaik. Inilah yang bisa saya pikirkan.

Pada ~ / .bash_logout di server jauh, saya masukkan:

echo -e "\033[0m"
/usr/bin/clear

Hanya karena penasaran: Adakah yang tahu cara yang lebih baik? (Saya mendapat echo -e "\033[0m"garis dari http://edoceo.com/liber/linux-bash-shell )

dgo.a
sumber
2
Saya sarankan Anda gunakan tputuntuk mengubah warna. Lihat itu.
Ram
Warna apa yang Anda atur dan bagaimana? Apakah maksud Anda prompt ( PS1)?
terdon

Jawaban:

37

Lebih baik:
tput sgr0biasanya setara denganecho -en "\e[0m"

Perbedaannya adalah bahwa menggunakan tput akan beradaptasi jika jenis terminal selain ANSI - dan telah diatur dengan benar.

man 5 terminfo untuk menggunakan lebih banyak kode.

Di sana Anda akan menemukan 'reset' sehingga tput resetseharusnya berfungsi.


$ echo -e "\ e [7m TEST \ e [0m"  
 TEST   
$ echo -e "$ (tput rev) TEST $ (tput sgr0)"  
 TEST   
$   

(Cetakan TEST seharusnya bertukar warna latar / latar depan, tidak dapat ditampilkan di sini - hanya "ditiru")


Menemukan opsi lain untuk ini , dengan cara yang kurang culun:

paket util-linux (on ubuntu) berisi setterm(utilitas shell).

ketik setterm --helpdan Anda akan menemukan opsi yang tersedia.


Output AKTUAL dari tput sgr0

$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d                                >.(B.[m<
0000006

... tergantung pada bagaimana terminal Anda diatur, misalnya

$ set | grep TERM
TERM=xterm-256color

untuk yang di atas.


$ infocmp ansi
    Direkonstruksi melalui infocmp dari file: / lib / terminfo / a / ansi
ansi | ansi / pc-term kompatibel dengan warna,
    am, mc5i, mir, msgr,
    warna # 8, cols # 80, itu # 8, baris # 24, ncv # 3, pasangan # 64,
    acsc = + \ 020 \, \ 021- \ 030. ^ Y0 \ 333` \ 004a \ 261f \ 370g \ 361h \ 260j \ 331k \ 277l \ 332m \ 300n \ 305o ~ p \ 304q \ 304r \ 304s \ \ 304s_t \ 303u \ 264v \ 301w \ 302x \ 263y \ 363z \ 362 {\ 343 | \ 330} \ 234 ~ \ 376,
    bel = ^ G, blink = \ E [5m, tebal = \ E [1m, cbt = \ E [Z, jelas = \ E [H \ E [J,
    cr = ^ M, cub = \ E [% p1% dD, cub1 = \ E [D, cud = \ E [% p1% dB, cud1 = \ E [B,
    cuf = \ E [% p1% dC, cuf1 = \ E [C, piala = \ E [% i% p1% d;% p2% dH,
    cuu = \ E [% p1% dA, cuu1 = \ E [A, dch = \ E [% p1% dP, dch1 = \ E [P,
    dl = \ E [% p1% dM, dl1 = \ E [M, ech = \ E [% p1% dX, ed = \ E [J, el = \ E [K,
    el1 = \ E [1K, home = \ E [H, hpa = \ E [% i% p1% dG, ht = \ E [I, hts = \ EH,
    ich = \ E [% p1% d @, il = \ E [% p1% dL, il1 = \ E [L, ind = ^ J,
    indn = \ E [% p1% dS, invis = \ E [8m, kbs = ^ H, kcbt = \ E [Z, kcub1 = \ E [D,
    kcud1 = \ E [B, kcuf1 = \ E [C, kcuu1 = \ E [A, khome = \ E [H, kich1 = \ E [L,
    mc4 = \ E [4i, mc5 = \ E [5i, nel = \ r \ E [S, op = \ E [39; 49m,
    rep =% p1% c \ E [% p2% {1}% -% db, rev = \ E [7m, rin = \ E [% p1% dT,
    rmacs = \ E [10m, rmpch = \ E [10m, rmso = \ E [m, rmul = \ E [m,
    s0ds = \ E (B, s1ds = \ E) B, s2ds = \ E * B, s3ds = \ E + B,
    setab = \ E [4% p1% dm, setaf = \ E [3% p1% dm,
    sgr = \ E [0; 10%?% p1% t; 7%;%?% p2% t; 4%;%?% p3% t; 7%;%?% p4% t; 5%;%? % p6% t; 1%;%?% p7% t; 8%;%?% p9% t; 11%; m,
    sgr0 = \ E [0; 10m, smacs = \ E [11m, smpch = \ E [11m, smso = \ E [7m,
    smul = \ E [4m, tbc = \ E [3g, u6 = \ E [% i% d;% dR, u7 = \ E [6n,
    u8 = \ E [?% [; 0123456789] c, u9 = \ E [c, vpa = \ E [% i% p1% dd,

SEE ALSO (man pages):
       tic(1) infocmp(1), captoinfo(1), infotocap(1), toe(1),  
       ncurses(3NCURSES), term(5).  terminfo(5).

Jelajahi lebih lanjut, mulailah di sini mungkin https://en.wikipedia.org/wiki/Terminfo
panduan Programmer untuk ncurses - buku google

Catatan: ncurses menyediakan antarmuka untuk termcap, terminfo dan tentu saja kutukan.

Hannu
sumber
echo -e "\e \033 \x1b " | od -t x1z- mana yang paling mudah dibaca?
Hannu
tput sgr0mengembalikan sesuatu yang berbeda dari \e[0m, lihat ini: a=$(tput sgr0); set | grep ^a=dan lihat hasilnya. Bisakah Anda juga memberi tahu untuk apa setterm pilihan yang setara \e[0m?
SebMa
Perhatikan bahwa \e[0matau yang sama \e[muntuk terminal jenis ANSI, tput sgr0 mungkin memberi Anda sesuatu yang sama sekali berbeda jika terminal Anda bukan ANSI. Anda tidak dapat memastikan bahkan untuk terminal ANSI, karena terminal yang Anda gunakan mungkin telah diatur secara berbeda dalam database terminfo.
Hannu
TERM=ansi a=$(tput sgr0); set | grep ^a=dan hasilnya a=$'\E[0;10m'. Ini terlihat berbeda dari\e[0m
SebMa
Iya? "Anda tidak dapat memastikan bahkan untuk terminal ANSI, karena terminal yang Anda gunakan mungkin telah diatur secara berbeda dalam database terminfo." Seperti yang Anda lihat di atas, varian itu memiliki \e(B\e[m- harapkan perbedaan!
Hannu
17

Saya yakin Anda sedang mencari "reset" perintah konsol

pengguna7963
sumber
2
Masalah dengan reset adalah menghapus semua konten konsol, dan terkadang itu bukan yang Anda inginkan.
niglesias
3

Anda mungkin menemukan menggunakan ini di .bash_logout jauh lebih tepat:

tput init

Mungkin baik untuk memiliki ini pada setiap .bash_logout sebagai praktik umum yang baik (dan mungkin bahkan pada ~ / .profile)

niglesias
sumber
2

Jika Anda meletakkan warna yang Anda inginkan di akun remote ~ / .bashrc, itu akan mulai berlaku saat masuk dan kembali ke pengaturan lokal Anda saat keluar.

Yitzchak
sumber
Saya juga berpikir begitu. Tapi, mereka tidak kembali ketika saya keluar ssh. Mungkin itu karena saya menggunakan setterm di .bashrc (menggunakan terminal GNOME). Apakah Anda menggunakan metode pengaturan skema warna yang berbeda di .bashrc?
dgo.a
jika Anda menggunakan GNOME, saya berasumsi Anda menjalankan linux. Saya menggunakan Ubuntu, tapi saya rasa prosesnya sangat mirip di semua distro. Anda dapat membuat cadangan file kemudian membukanya di editor teks dan mengedit konten mulai dari baris yang mengatakan PS1 =. Anda dapat menemukan informasi di novell.com/coolsolutions/tools/17142.html . Ini memberi tahu Anda lebih dari yang ingin Anda ketahui tentang file .bashrc.
Yitzchak
1
Eh, tidak. Pengaturan terminal tidak didasarkan pada apa yang Anda lakukan di terminal. Mereka (antromorfisme!) Tidak peduli jika Anda lokal, jauh, bekerja di Swahili atau apa pun. Ini mesin negara sederhana. Karena Anda menggunakan perintah untuk mengubahnya ke sesuatu ... Anda harus menggunakan perintah untuk mengubahnya ke sesuatu yang lain. Solusi .bash_logout adalah cara terbaik, kecuali jika Anda ingin menulis alias / fungsi untuk membungkus perintah ssh Anda. Blech. Lebih mudah, buat pengaturan Anda (apa pun itu) bagian dari output prompt PS1 Anda. Ketika Anda masuk ke mesin, itu akan berubah, logout, prompt lama akan kembali.
lornix