एक लॉगिन शेल पहले पढ़ता है /etc/profile
और फिर ~/.bash_profile
।
एक गैर लॉगिन खोल से /etc/bash.bashrc
और फिर पढ़ता है ~/.bashrc
।
वह महत्वपूर्ण क्यों है?
इस पंक्ति के कारण man ssh
:
यदि कमांड निर्दिष्ट है, तो इसे लॉगिन शेल के बजाय दूरस्थ होस्ट पर निष्पादित किया जाता है।
दूसरे शब्दों में, यदि ssh कमांड में केवल विकल्प हैं (कमांड नहीं), जैसे:
ssh user@host
यह एक लॉगिन शेल शुरू करेगा, एक लॉगिन शेल पढ़ता है ~/.bash_profile
।
एक ssh कमांड जिसमें एक कमांड है , जैसे:
ssh user@host :
जहाँ आज्ञा हो :
(या कुछ न करो)।
यह एक लॉगिन शेल शुरू नहीं करेगा , इसलिए ~/.bashrc
जो पढ़ा जाएगा वह होगा।
दूर का डंडा
दूरस्थ कंप्यूटर में / dev / stdin के लिए सप्लाई किया गया tty कनेक्शन वास्तविक tty या कुछ और हो सकता है।
के लिये:
$ ssh sorontar@localhost
/etc/profile sourced
$ ls -la /dev/stdin
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0
$ ls -la /proc/self/fd/0
lrwx------ 1 sorontar sorontar 64 Dec 24 19:34 /proc/self/fd/0 -> /dev/pts/3
$ ls -la /dev/pts/3
crw--w---- 1 sorontar tty 136, 3 Dec 24 19:35 /dev/pts/3
टीटीवाई में समाप्त होता है (नेटवर्क कनेक्शन नहीं) जैसा कि शुरू हुआ बैश इसे देखता है।
एक कमांड के साथ ssh कनेक्शन के लिए:
$ ssh sorontar@localhost 'ls -la /dev/stdin'
sorontar@localhost's password:
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0
TTY की शुरुआत की सूची समान है, लेकिन ध्यान दें कि / etc / प्रोफ़ाइल खट्टा नहीं था।
$ ssh sorontar@localhost 'ls -la /proc/self/fd/0'
sorontar@localhost's password:
lr-x------ 1 sorontar sorontar 64 Dec 24 19:39 /proc/self/fd/0 -> pipe:[6579259]
जो शेल को बताता है कि कनेक्शन एक पाइप है (नेटवर्क कनेक्शन नहीं)।
इसलिए, दोनों परीक्षण मामलों में, शेल यह जानने में असमर्थ है कि कनेक्शन एक नेटवर्क से है और इसलिए पढ़ा नहीं जाता है ~/.bashrc
(यदि हम केवल नेटवर्क के कनेक्शन के बारे में बात करते हैं)। यह ~ / .bashrc पढ़ता है, लेकिन एक अलग कारण से।