Permintaan warna yang berbeda untuk mesin yang berbeda saat menggunakan terminal / ssh?

11

Saya memiliki 5 mesin yang saya ssh terus lakukan untuk bekerja. Semakin frustrasi ketika saya mengeluarkan perintah yang salah pada kotak yang salah. Untungnya saya belum melakukan hal buruk. Saya ingin tahu apakah ada peretasan yang saya dapat hardcode yang akan menampilkan prompt saya dalam berbagai warna berdasarkan mesin saya ssh ke? Seperti biru untuk desktop1, ungu untuk laptop, merah untuk server dll? Apakah ini mungkin?

Saat ini saya menggunakan perintah ini export PS1 = "\ e [0; 31m [\ u @ \ h \ W] \ $ \ e [m" diambil dari sini http://www.cyberciti.biz/faq/bash-shell -mengganti-warna-dari-my-shell-prompt-di bawah linux-atau-unix / tapi jelas tidak bekerja di ssh.

Juga, jika Anda memiliki tips pesta keren lainnya untuk membantu saya memudahkan penglihatan saya akan sangat bagus. Saya mendapatkan tip ini yang mewarnai halaman manual.

http://linuxtidbits.wordpress.com/2009/03/23/less-colors-for-man-pages/

bcrawl
sumber
1
Baris name@ ** server** sebelum setiap perintah tidak menyampaikan server apa yang Anda pakai? Dibutuhkan beberapa membiasakan diri, tetapi cara terbaik yang ada
TheLQ
Sistem Operasi Apa yang laptop Anda kerjakan?
SamK
1
name @ server khususnya tidak membantu ketika menggunakan hal-hal seperti Amazon cloud, karena itu mengubah setiap boot dan tidak menyampaikan tujuan dari kotak atau nama yang mudah diingat (user @ ip-xxxx). Jadi +1 untuk pertanyaan ini :)
Rafiq Maniar

Jawaban:

11

The metode yang saya gunakan adalah untuk menghasilkan warna untuk hostname dari nama host. Tidak ada banyak warna untuk dipilih sehingga akan dengan mudah menghasilkan bentrokan, tetapi berguna untuk sejumlah kecil mesin yang saya kelola.

hostnamecolor=$(hostname | od | tr ' ' '\n' | awk '{total = total + $1}END{print 30 + (total % 6)}')

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

Baris pertama menghasilkan angka antara 30 (inc) dan 36 (exc) dari nama host mesin. Baris kedua berlaku untuk prompt dengan nama pengguna dan jalur berwarna hijau (32) dan nama host dalam warna yang dihasilkan.

Tidak ada warna latar yang ditetapkan, dan saya mengecualikan cyan (36) dan putih (37) dari latar depan untuk menghindari bentrokan dengan latar belakang terminal yang saya gunakan.

Dan Midwood
sumber
Jadi itu bisa menghasilkan warna yang sama untuk latar depan dan belakang?
Chris S
Tidak ada warna latar belakang yang dihasilkan. Tetapi Anda benar bahwa warna yang dihasilkan dapat cocok dengan latar belakang. Saya mengecualikan putih (37) dan cyan (36) karena mereka tidak bekerja dengan baik dengan latar belakang terminal yang saya gunakan. Saya telah mengedit jawaban untuk menjelaskannya.
Dan Midwood
3

Anda berada di jalur yang benar. Saya telah menggunakan metode yang dirinci pada halaman yang Anda tautkan, dan detailnya persis bagaimana di blog saya . Ini berfungsi untuk saya menggunakan Putty dari kotak windows, dan juga SSH dari satu server CentOS ke yang lain. Jika itu tidak berhasil untuk Anda, dan Anda yakin Anda sudah mendapatkan sintaks yang benar, itu bisa ke klien SSH Anda.

dunxd
sumber
Hai, saya memang mengubah .bashrc dan saya mengerti bahwa saya dapat mengubah warna secara lokal. Yang saya inginkan adalah ketika saya ssh ke komputer yang berbeda, warna prompt berubah. Saya tahu bahwa terminal tidak akan tahu secara otomatis, jadi saya mencari petunjuk untuk mewujudkannya.
bcrawl
1
Sunting: ok, ya Anda benar. Jika file .bashrc diubah pada setiap komputer, ketika Anda ssh, itu akan menampilkan warna yang dikonfigurasi. Saya tidak mengedit file yang tepat. Terima kasih. Anggap itu terpecahkan.
bcrawl
2
Jika jawaban ini mengarahkan Anda langsung ke solusi, maka pertimbangkan untuk menandai ini sebagai Jawaban yang Diterima dengan mengklik garis besar tanda centang di sebelah kiri jawaban.
Kevin M
1

Di pekerjaan saya, kami memiliki berbagai tahapan server

pengembangan pementasan produksi

Saya menggunakan prompt merah sebagai prod dan hijau untuk pementasan. Sekarang semua mesin staging memiliki stg dalam domain tersebut.

Jadi prod akan

web1.domain.com
web2.domain.com

Pementasan / Dev akan

stg-web1.domain.com
stg-web2.domain.com
dev-web1.domain.com
etc

Ini hanya akan bekerja untuk redhat / centos

Tetapi untuk server prod saya memiliki yang berikut di

/etc/sysconfig/bash-prompt-xterm

Di dalamnya ada

export PS1="\[[\e[1;31m\]\u@\[\e[1;31m\]\h\[\e[0m\] \W] "

Itu akan mengubah prompt menjadi merah .. Sekarang Anda tidak dapat menyentuh / etc / bashrc dan semua mesin non-prod lainnya akan tetap dengan warna foreground normal yang Anda gunakan .. tapi saya membuatnya hijau

if [ "$PS1" ]; then
    case $TERM in
        xterm*)
                if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
                        PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
                else
                        PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'
                fi
                ;;

Bahwa jika blok harus ada di sana .. Saya baru saja mengubah warna di bagian lain menjadi hijau .. 33 berwarna hijau

Mike
sumber
0

Anda dapat mengubah bash.rc pada setiap mesin untuk memberikan warna prompt yang berbeda. Atau jika Anda memiliki cukup privilege, ubah sshd config untuk mengizinkan transfer lingkungan pengguna melalui PermitUserEnvironmentarahan.

teis
sumber
0

Kami sedang mengerjakan solusi berbasis string hostum yang lebih komprehensif dalam intisari inti ini . Kompatibilitas 256 warna. Selain dari kasus di mana Anda benar-benar tertarik untuk menentukan warna tertentu untuk masing-masing server Anda sendiri, saya merasa ini adalah salah satu dari "itu yang kita punya komputer untuk" masalah, jadi mendapatkan warna "acak" ditentukan untuk Anda berdasarkan pada checksum harus menjadi pendekatan yang baik.

lkraav
sumber