मैं आत्म-उत्तर दे रहा हूं, क्योंकि मैंने आखिरकार रहस्य का पता लगा लिया है। न तो -t
विकल्प के लिए ssh
, न ही -l
विकल्प के लिए bash
अपने दम पर लॉगिन शेल को बढ़ावा मिलेगा - लेकिन संयोजन में वे काम करते हैं।
ssh user@host.com -t 'cd /some/where; FOO=BAR NUMBER=42 bash -l'
निर्देशिका, सेट वातावरण चर बदल जाता है, और उसके बाद उचित लॉगिन खोल (कि फर्क सिर्फ इतना है कि मैं अब तक मिल गया है है शुरू होता है /etc/motd
इस तरह से प्रदर्शित नहीं किया जाता है - यह सामान्य रूप से है ssh
की या login
की जिम्मेदारी है, नहीं bash
है - कि सब कुछ के अलावा अन्य लगता है पूरी तरह से काम करने के लिए, और सभी पर्यावरण चर समान हैं)।
ये वातावरण / निर्देशिका परिवर्तन ssh के बाद होते हैं, इसलिए वे PermitUserEnvironment
संबंधित और संबंधित सेटिंग्स (बिल्कुल नियोजित) द्वारा प्रतिबंधित नहीं होते हैं , लेकिन पहले .bashrc
/ .profile
निष्पादित हो जाते हैं। इसमें अपसाइड्स और डाउनसाइड्स हैं - बस कुछ को ओवरराइड करना कठिन है जो बैश इनिट स्क्रिप्ट्स से सेट हो जाता है PS1
, लेकिन ssh
कमांड लाइनों में सही मानों को पैक करना आसान है , और .profile
सभी भारी उठाने हैं।
और अगर वास्तव में आवश्यक है, तो .profile
कमांड लाइन के साथ कुछ निष्पादित करने के लिए बैश प्राप्त करना वास्तव में बहुत आसान है जैसे ssh user@foo.com -t 'cd /mnt; echo ". ~/.bash_profile; PS1=\"\\h-\w \"" >~/xxx; bash --init-file ~/xxx'
- बहुत ही बदसूरत जब उस तरह से रखा जाता है, लेकिन इन वैकल्पिक .profile
फ़ाइलों को पहले तैयार किया जा सकता है। (जहां तक मैं बता सकता हूं bash
कि .profile
स्क्रिप्ट के लिए कुछ उम्मीदवार स्थान हैं और पहले पाए गए को निष्पादित करेगा - . file
इस तरह की स्वचालित कमियां नहीं हैं, इसलिए आपको यह जांचने की आवश्यकता होगी कि आपका सामान्य कहां है profile
यदि आप ऐसा करना चाहते हैं)