Apakah ada cara untuk membuat bash prompt dinamis, sehingga berubah warna saat masuk ke server?
Jadi saya ingin warna seperti menjadi hijau saat di sistem saya dan berubah menjadi merah ketika terhubung ke server. Saya memiliki sejumlah besar server yang tidak ingin saya bedakan .bashrc
dengan semua itu.
Jawaban:
Remote prompt diatur oleh remote
~/.bashrc
. Jadi Anda masih perlu menyalinnya ke server jauh. Namun, Anda dapat menggunakan satu~/.bashrc
untuk semua host, dan mengatur warna prompt berdasarkan nama host:Catatan:
Jangan setel
PS1
jika belum disetel (mis., Jika shell tidak interaktif). Menguji jikaPS1
tidak kosong adalah cara yang sangat umum untuk memutuskan apakah shell itu interaktif, dan Anda tidak ingin membingungkan program yang melakukannya. (Bisa dibilang tes yang lebih akurat memeriksa apakah$-
berisii
.)Jika Anda ingin kode ini dijalankan saat masuk ke server jauh, Anda harus memiliki salah satu file profil yang selalu sumber
~/.bashrc
. Tapi saya anggap Anda tahu itu.Dalam
PS1
, kode pelarian harus disertakan\[...\]
.\[033[m
me-reset latar depan dan latar belakang ke default. Jadi di sini,:\w
muncul di terminal foreground / background.\[033[48;5;XXXm\033[38;5;YYYm
mengatur latar belakang / latar depan keXXX
/YYY
.Untuk skrip yang menampilkan warna yang tersedia, coba
colortest
.Untuk memeriksa seperti apa tampilannya:
sumber
Jika Anda tidak ingin (tidak bisa) membuat remote memiliki yang terpisah
PS1
, maka saya akan mengatakan "tidak", itu akan setidaknya sangat sulit. Pertimbangkan bahwa pada koneksi SSH pihak lokal tidak memiliki ide nyata tentang apa itu shell prompt dan apa yang lain, dan karenanya pengaturan warna untuk prompt benar-benar harus datang dari jarak jauh. Anda dapat mengatur warna sebelum memulai sesi, tetapi mereka akan efektif untuk semua output, yaitu sampai seorangls
atau editor menetapkan warna sendiri.Tentu saja Anda dapat membuat beberapa pembungkus untuk sesi untuk mendeteksi segala sesuatu yang tampak seperti prompt dan untuk mewarnainya, tetapi itu akan dengan mudah mengarah ke positif palsu (warna pada setiap baris dengan
$
?) Dan menjadi sangat rumit dibandingkan dengan hanya menjatuhkan sebuah satu baris ke Anda.profile
atau.bashrc
di setiap mesin.Dengan sejumlah mesin, mungkin ada gunanya mencari solusi untuk menyinkronkan perubahan konfigurasi pada mereka semua. Baik itu alat yang dibuat untuk itu, atau hanya sebuah skrip, atau hanya menjalankan loop untuk menyalin (set) file konfigurasi pada semuanya.
sumber
Saya menggunakan skrip wrapper dengan sshpass yang pertama-tama akan mengunggah profil sementara dan kemudian ssh menggunakan profil ini (dan menghapus file temp).
Dua hal utama dari naskah ini adalah:
scp ~/.bash_remote "${USER}"@"${IP}":/tmp/.bash_tmp 1>/dev/null
ssh -t "${USER}"@"${IP}" "bash --rcfile /tmp/.bash_tmp; rm /tmp/.bash_tmp"
Dengan ini, Anda dapat dengan mudah menentukan warna sesi jarak jauh.
Saya tahu ini tidak langsung menjawab pertanyaan Anda, tetapi bisa digunakan untuk menyelesaikannya.
sumber
sshpass -p
jika memungkinkan! Argumen baris perintah untuk menjalankan program biasanya dapat dilihat oleh semua pengguna di dalamnyaps
, dan karenanya akan menjadi kata sandi. Bahkan jika Anda tidak memiliki akun pengguna lain di mesin, Anda dapat mencetaknya di layar secara tidak sengaja.sshpass
dapat membaca kata sandi dari variabel lingkungan, yang tidak terlalu sulit untuk digunakan. Juga, pertimbangkan kunci ssh jika Anda akan menyimpan kredensial login ke file.Anda mungkin tertarik
context-color
, yang telah saya kumpulkan untuk tujuan yang tepat: https://github.com/ramnes/context-colorIni adalah skrip sederhana yang, ketika dijalankan, mengeluarkan warna berdasarkan hash keluaran perintah. Dengan itu diinstal di suatu tempat di Anda
$PATH
, Anda dapat melakukan sesuatu seperti ini di.bashrc
:(di mana
--prompt/-p
sakelar sehingga warna lolos untuk meminta, dan\[\e[0m\]
urutan pelarian untuk mengatur ulang warna)Secara default, perintah yang digunakan untuk menghasilkan hash adalah
whoami; hostname
. Jika Anda hanya ingin warna berubah sesuai dengan nama host, Anda dapat mengubah$CONTEXT
lingkungan variabel (export CONTEXT="hostname"
) atau cukup gunakan--context/-c
opsi (context-color -c "hostname"
).Lihat di bawah untuk contoh:
sumber