मैंने देखा है कि जब मैं ssh <host> <command>
सिंटैक्स का उपयोग करके सीधे SSH होस्ट पर कमांड चलाता हूं , तो मैं आउटपुट को देखता हूं, .bashrc
लेकिन .bash_profile
(या .profile
) के आउटपुट को नहीं ।
उदाहरण के लिए, यदि मैं दोनों फाइलों के शीर्ष पर निम्न कमांड रखता हूं,
echo ${BASH_SOURCE[0]}
और मैन्युअल स्रोत .bash_profile
(जो स्रोत .bashrc
बदले में), मैं देखूंगा
$ . .bash_profile
.bash_profile
.bashrc
यह वही आउटपुट है जिसे मैं ssh <host>
कमांड के रूप में उपयोग करके एसएसएच के माध्यम से दूरस्थ रूप से इस कंप्यूटर में लॉग इन करता हूं । (और अगर मैं .bash_profile
कहीं और अस्थायी रूप से स्टोव करता हूं , तो इनमें से कोई भी रेखा नहीं मिलती है।)
हालांकि, अगर मैं के साथ रिमोट मशीन पर सीधे एक आदेश पर अमल ssh <host> <command>
के रूप ssh
में, इस तरह तो उत्पादन दिखता है:
$ ssh <host> echo foo
/home/rlue/.bashrc
foo
मैं समझता हूँ कि बीच का अंतर है .bash_profile
और .bashrc
यह है कि पूर्व के लिए है लॉगिन गोले जबकि बाद के लिए है इंटरैक्टिव, गैर लॉगिन गोले ।
मैंने निम्नलिखित निष्कर्ष निकाला है:
ssh <host>
केवल स्रोत.bash_profile
, जबकिssh <host> <command>
स्रोत केवल.bashrc
, जिसका अर्थ है- पूर्व एक लॉगिन शेल है और बाद वाला नहीं है।
क्या ये निष्कर्ष सही हैं? ssh <host> <command>
एक इंटरैक्टिव, गैर-लॉगिन शेल के रूप में क्यों माना जाता है? क्या SSH अभी भी कमांड को निष्पादित करने के लिए रिमोट मशीन में प्रवेश नहीं कर रहा है?
.bashrc
एक त्रुटि फेंक रही थीं, जबकि समान रेखाएँ .bash_profile
नहीं थीं। मैंने आपत्तिजनक लाइनों को ठीक करने से पहले विसंगति की जांच करने का अवसर लिया।
.bashrc
? वह फ़ाइल किसी भी आउटपुट का उत्पादन करने वाली नहीं है। से किसी भी आउटपुट.bashrc
ssh का उपयोग कर सभी उपकरणों को उनके परिवहन के रूप में तोड़ सकता है।