Bir sunucuya giriş yaptığımda renk değiştirmek için Bash istemi


15

Bash istemini dinamik yapmanın bir yolu var mı, böylece bir sunucuda oturum açıldığında renk değiştiriyor mu?

Bu yüzden sistemimde iken rengin yeşil olmasını ve sunuculara bağlandığında kırmızıya değişmesini istiyorum. .bashrcTüm bunlara farklı bir şey koymak istemediğim çok sayıda sunucum var .


Muhtemelen değil. Ama buna geri dön superuser.com/questions/33712/…
rastgele

1
Neden terminalinizi kırmızı (veya başka bir renk) yapmıyorsunuz, böylece onlara bağlandığınızda varsayılan bir beyaz elde edersiniz?
Monica'yı eski durumuna getir - Aug--

Yanıtlar:


9

Uzaktan kumanda istemi uzaktan kumanda tarafından ayarlanır ~/.bashrc. Bu yüzden hala uzak sunucuya kopyalamanız gerekir. Ancak, ~/.bashrctüm ana bilgisayarlar için bir tekli kullanabilir ve ana bilgisayar adına göre bilgi istemi rengini ayarlayabilirsiniz:

[ "$PS1" ] || return 0                           # continue only when interactive
case $(hostname -s) in
laptop*)
    prompt_color='\033[48;5;16m\033[38;5;46m'    # green(46) on black(16)
    ;;
server*)
    prompt_color='\033[48;5;16m\033[38;5;196m'   # red(196) on black(16)
    ;;
esac
ORIG_PS1=$PS1                                    # in case needed
PS1='<\['${prompt_color}'\]\h\[\033[m\]:\w>\$ '
unset prompt_color

Notlar:

  • Belirlemeyin PS1zaten ayarlanmış değilse (yani kabuk etkileşimli değilse). PS1Boş olup olmadığını test etmek, kabuğun etkileşimli olup olmadığına karar vermenin çok yaygın bir yoludur ve bunu yapan programları karıştırmak istemezsiniz. (Muhtemelen daha doğru bir test $-içeriyor mu kontrol ediyor i.)

  • Uzak bir sunucuya giriş yaparken bu kodun çalışmasını istiyorsanız, her zaman kaynak profil dosyalarından birine sahip olmalısınız ~/.bashrc. Ama bunu bildiğini varsayıyorum.

  • İçinde PS1, kaçış kodları içine alınmalıdır \[...\].

  • \[033[mön planı ve arka planı varsayılana sıfırlar. Burada :\wterminal ön planında / arka planında görünür.

  • \[033[48;5;XXXm\033[38;5;YYYmArka plan / ön plan ayarlar XXX/ ' YYY.

  • Kullanılabilir renkleri döken bir komut dosyası için deneyin colortest.

  • İstemin nasıl görüneceğini kontrol etmek için:

    echo -e "<\033[48;5;16m\033[38;5;196mhost\033[m:dir>$ "

7

Uzaktan kumandaların ayrı olmasını istemiyorsanız (yapamazsanız) PS1, "hayır" derdim, en azından çok zor olurdu. Bir SSH bağlantısında, yerel tarafın kabuk istemi ve başka bir şey hakkında gerçek bir fikri olmadığını ve bu nedenle bilgi istemi için renk ayarlamanın gerçekten uzaktan kumandadan gelmesi gerektiğini düşünün. Oturuma başlamadan önce renkleri ayarlayabilirsiniz, ancak tüm çıktılar için etkili olurlar, yani bir lsveya bir editör kendi renklerini ayarlayana kadar .

Tabii ki, bir istem gibi görünen her şeyi tespit etmek ve renklendirmek için oturum için bir paketleyici ile gelebilirsiniz, ancak kolayca yanlış pozitiflere (her satırda bir $? İle renk ) neden olur ve sadece makinenize .profileveya .bashrcher makineye tek bir satır .

Bir dizi makinede, her durumda yapılandırma değişikliklerini senkronize etmek için çözümler aramak yararlı olabilir. Bunun için yapılmış bir araç, ya da sadece bir komut dosyası ya da sadece bir (set) yapılandırma dosyasını kopyalamak için bir döngü çalıştırıyor olsun.


2
Bu son paragraf anahtardır. OP "çok sayıda sunucuyu" yönetiyorsa, her birinin ilk önce tek tek yapılandırılması şaşırtıcıdır.
Monica ile Hafiflik Yarışları

5

Önce geçici bir profil ve sonra ssh bu profili kullanarak (ve geçici dosyayı siler) sshpass ile bir sarıcı komut dosyası kullanıyorum.

Senaryonun iki ana özelliği şunlardır:
scp ~/.bash_remote "${USER}"@"${IP}":/tmp/.bash_tmp 1>/dev/null
ssh -t "${USER}"@"${IP}" "bash --rcfile /tmp/.bash_tmp; rm /tmp/.bash_tmp"

Bunu kullanarak uzak oturumların renklerini kolayca tanımlayabilirsiniz.

Bunun sorunuza doğrudan cevap vermediğini biliyorum, ancak bunu çözmek için kullanılabilir.


3
sshpass -pMümkünse kullanmayın ! Çalışan programlara ilişkin komut satırı bağımsız değişkenleri genellikle içindeki tüm kullanıcılar tarafından görülebilir psve bu nedenle parola olur. Makinede başka kullanıcı hesabınız olmasa bile, yanlışlıkla ekranda yazdırabilirsiniz. sshpassşifreyi, kullanımı zor olmayan bir ortam değişkeninden okuyabilir. Ayrıca, oturum açma kimlik bilgilerini yine de bir dosyaya kaydedecekseniz, ssh anahtarlarını göz önünde bulundurun.
ilkkachu

Haklısın ve ben onun kullanımını teşvik etmeye çalışmıyordum. Sadece senaryomdan sadece geliştirme amaçlı kullanılan ve güvenlik riski sağlamayan bir örnek olarak yapıştırıyordum. SSHPASS değişkeni, ssh tuşlarının kullanıldığı üretim sistemleri için boş bırakılacaktır. Güncelleyeceğim.
Mikael Kjær

1

Bu context-coloramaç için bir araya getirdiğim ilginizi çekebilir : https://github.com/ramnes/context-color

Bu, yürütüldüğünde bir komut çıkışının karmasını temel alan bir renk veren basit bir komut dosyasıdır. İçinde bir yere kurulduktan sonra $PATH, aşağıdakine benzer bir şey yapabilirsin .bashrc:

export PS1="$(context-color -p)$PS1\[\e[0m\]"

( --prompt/-pdüğme istemler için rengin \[\e[0m\]kaçması ve rengin sıfırlanması için çıkış sırası)

Varsayılan olarak, karmayı oluşturmak için kullanılan komuttur whoami; hostname. Rengin yalnızca ana makine adına göre değişmesini istiyorsanız, $CONTEXTdeğişken ortamını ( export CONTEXT="hostname") değiştirebilir veya --context/-c( context-color -c "hostname") seçeneğini kullanabilirsiniz .

Örnek için aşağıya bakın:

gösteri

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.