Yerel bilgisayarda ve ssh oturumunda $ PS1'i farklı ayarlayın


9

Ana dizinimi sürüm kontrolü altında tutuyorum, böylece temel yapılandırmam herhangi bir bilgisayarda kolayca kullanılabilir.

Yerel bilgisayarımdaki bash komut istemim, geçerli git deposunu ve durumunu içeren karmaşık, renkli bir şey. Ama uzaktaki bir makineye user@host ~ $girdiğimde basit bir komut istemi almayı tercih ederim ssh.

Yerel olarak çalışırken .profilekarmaşık $PS1ve bir sshoturumda çalışırken basitleştirilmiş bir tane kuracak şekilde güncellememi istiyorum .

Temel olarak, $AM_I_LOGGED_IN_VIA_SSHbenim test etmek için değişken gibi bir şey istiyorum .profile. Mümkün mü?

Yanıtlar:


8

SSH üzerinden giriş yaptığınızda, birkaç ekstra ortam değişkeni ayarlanır. Bunları PS1'inizi .profile dosyanızda ayarlamak için bir test olarak kullanabilirsiniz.

if [ -n "$SSH_CLIENT" ]; then
    PS1="Via ssh: "
else
    PS1="Local: "
fi

7

Eğer çevreyi kontrol ederse ( env | grep SSH) aşağıdaki gibi çok sayıda adayı bulacaksınız $SSH_CLIENT, $SSH_CONNECTIONve $SSH_TTY; tam liste sshdsürüme bağlı olacaktır .


2

Sshd'niz faydalı değişkenler sağlamıyorsa,

ps -p $PPID

veya $PPIDkabuğun üst işleminin uzaktan oturum açma işleminiz olup olmadığını görmek için başka bir rastgele ps hilesi (kabuğunuz ayarlanmadıysa ). Sonra üst-uzak-şey-$ PS1 geçiş yaparsanız. Ve sonra OpenSSH'yi indirin ve ssh sunucunuz önemsiz olduğundan geekosaur / Caleb'in önerilerini kullanın. ;)

Ya da, "ben kimim" in çıktısını kullanabilir, son alanı (yani $( who am i | awk '$0=$NF')) alabilir ve ana bilgisayarın uzak veya yerel olup olmadığını yerel olarak mı yoksa uzaktan mı oturum açtığınıza karar vermek için kontrol edebilirsiniz.

Veya $(hostname)kabuğunuzun belirli ana bilgisayarlarda uygun $ PS1'i kullanmasını sağlamak için çıktısını açabilirsiniz .

Ya da, gerçekten delirelim. Bash, ksh93 veya zsh gibi modern bir kabuk kullanıyorsanız, $ PS1'in yürütme sırasında yeniden değerlendirilmesinden yararlanabilirsiniz. Yani, cwd'niz depodaysa ve dışarıda başka bir şey varsa, çılgın git öğelerini yapmak için bir satır içi koşullu blok ekleyebilirsiniz. Örneğin, burada [[ conditional ]] && $( echo "whatever it should be if true) || $( echo "whatever should be the if-not-true prompt" )temelde kullanarak kullandığım dizine bağlı olarak istem değişikliği yapıyorum .

default prompt$ PS1='$(id -un) @ $(hostname)$( [[ $(pwd) = /tmp ]] && echo " [I am in /tmp]" || echo " /not/in/tmp")$ '
myname @ host /not/in/tmp$ cd /tmp
myname @ host [I am in /tmp]$ cd /etc
myname @ host /not/in/tmp$

Elbette, $ PS1 tanımı profilinizde çılgın görünecek, ancak daha sonra sadece git deposunda olduğunuzda süper renkli-git-stuff elde edersiniz, başka bir yerde düzenli renkler elde edersiniz. :) PS1 ödevinin etrafında tek tırnak kullanmanız gerektiğini unutmayın. PS1 atandığında değişkenlerin genişletilmesini istemezsiniz; $ PS1 daha sonra değerlendirildiğinde bunların genişletilmesini istiyorsunuz. Yani, tek tırnak.


1

Eğer PermitUserEnvironmentsshd etkindir o zaman kullanabilirsiniz ~/.ssh/environmentoluşturmak $PS1ve sonra sadece normal olarak ayarlar Betiğinizde bir değere varlığını tespit.


0

Ignacio'nun cevabına ek olarak, işleri netleştirmek PermitUSerEnvironmentiçin, bunun çalışması için sunucu tarafında seçeneğin etkinleştirilmesi gerekir. Sunucu bu seçeneği etkinleştirmezse, o sunucuyla renkli ssh oturumunuz olmaz.

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.