Sonunda sırrı keşfettiğim için kendi kendime cevap veriyorum. Ne -t
seçeneği ssh
ne de -l
seçeneği bash
kendi başına giriş kabuğuna yol açmaz - ancak birlikte çalışırlar.
ssh user@host.com -t 'cd /some/where; FOO=BAR NUMBER=42 bash -l'
dizini değiştirir, ortam değişkenlerini ayarlar ve sonra doğru giriş kabuğunu başlatır (şimdiye kadar bulduğum tek fark /etc/motd
, bu şekilde görüntülenmemesidir - normalde ssh
's veya login
' sorumluluktur, bash
's - her şeyin göründüğünden başka ve tüm çevresel değişkenler aynıdır).
Bunlar sınırlı olmazsınız yüzden bu ortamı / dizin değişiklikleri, ssh'ın sonra ne PermitUserEnvironment
ve ilgili ayarları (tam olarak planlanmış), ancak daha önce .bashrc
/ .profile
idam. Bu yukarı ve aşağı yönlüdür - bash init komut dosyalarından ayarlanan bir şeyi geçersiz kılmak daha zordur PS1
, ancak tam olarak doğru değerleri ssh
komut satırlarına toplamak ve .profile
tüm ağır kaldırma işlemlerini yapmak daha kolaydır .
Ve gerçekten gerekliyse, .profile
komut satırıyla bir şey yürütmek için bash almak oldukça kolaydır ssh user@foo.com -t 'cd /mnt; echo ". ~/.bash_profile; PS1=\"\\h-\w \"" >~/xxx; bash --init-file ~/xxx'
- bu şekilde konduğunda çok çirkin, ancak bu alternatif .profile
dosyalar daha önce hazırlanabilir. (söyleyebildiğim kadarıyla komut dosyası bash
için birkaç aday yeri var .profile
ve ilk bulunanı yürütecek - . file
böyle bir otomatik geri dönüşe sahip değil, bu yüzden bunu profile
yapmak istiyorsanız normalinizin nerede olduğunu kontrol etmeniz gerekecek )