ऐतिहासिक रूप से, जब आपने (पाठ कंसोल पर, और क्या?) लॉग इन किया , तो प्रोफाइल फाइल ( /etc/profile
और ~/.profile
) का इस्तेमाल किया गया।
- सत्र के लिए पर्यावरण चर और अन्य पैरामीटर (जैसे umask) सेट करें।
- सत्र की शुरुआत में अतिरिक्त कार्यक्रम चलाएं (जैसे ईमेल अधिसूचना)।
- सत्र के लिए प्रोग्राम चलाएं, यदि शेल से अलग है (उदाहरण के लिए एक और शेल या एक्स विंडो)।
- टर्मिनल पैरामीटर (जैसे
stty
) सेट करें ।
- शेल पैरामीटर सेट करें (जैसे उपनाम)।
इन सभी उद्देश्यों की पहचान बाद में अलग-अलग नहीं की गई थी। क्योंकि प्रोफाइल स्क्रिप्ट ऐसी चीजें कर सकती हैं, जो केवल एक संवादात्मक सत्र (टर्मिनल इंटरेक्शन, अन्य कार्यक्रमों को शुरू करने) में समझ में आती हैं, जब दूरस्थ शेल मंगलाचरण ( आरएचएस ) पेश किया गया था, आरएच के मेक ने दूरस्थ शेल को लॉगिन शेल के रूप में लागू नहीं करने का फैसला किया, ताकि प्रोफाइल स्क्रिप्ट निष्पादित न हो। (कुछ संस्करणों में rshd
दूरस्थ शेल को लॉगिन शेल के रूप में चलाने का विकल्प होता है।) SSH ने rsh के लिए ड्रॉप-इन प्रतिस्थापन होने के लिए इस व्यवहार की प्रतिलिपि बनाई।
यदि आप अपनी प्रोफ़ाइल स्क्रिप्ट निष्पादित करना चाहते हैं, तो आप उन्हें स्पष्ट रूप से लागू कर सकते हैं।
ssh 127.0.0.1 '. /etc/profile; . ~/.profile; ydisplay'
.
शेल के अंदर प्रोफ़ाइल स्क्रिप्ट को लोड करने के लिए कमांड पर ध्यान दें : वे उस शेल के अंदर निष्पादित करने के लिए कमांड हैं, बाहरी प्रोग्राम नहीं।
यदि आप सभी उपयोगकर्ताओं के लिए वैश्विक रूप से एक वातावरण चर सेट करना चाहते हैं, तो कई प्रणालियों पर एक और विधि है: इसे परिभाषित करने के बजाय /etc/profile
, इसे परिभाषित करें /etc/environment
। यह फ़ाइल pam_env
मॉड्यूल के माध्यम से पढ़ी जाती है ; अधिकांश लिनक्स वितरण इसे पढ़ने के लिए स्थापित किए जाते हैं।
यदि आपका लॉगिन शेल बैश है, तो आगे की संभावना है। आम तौर पर, आपको पर्यावरण चर सेट नहीं करना चाहिए.bashrc
(क्योंकि वे एक्स सत्रों में सेट नहीं किए जाएंगे सिवाय अगर आप एक इंटरैक्टिव शेल के साथ एक टर्मिनल के माध्यम से जाते हैं, क्योंकि वे सेट नहीं होंगे यदि आप एक पाठ कंसोल या अधिक पर अंतःक्रियात्मक रूप से लॉग इन करते हैं ssh, क्योंकि वे कस्टम सेटिंग्स को ओवरराइड कर देंगे यदि आप किसी अन्य प्रोग्राम के अंदर शेल इनवॉइस करते हैं)। हालांकि, बैश में एक अजीब विशेषता है जो मैंने कभी नहीं समझा: यह ~/.bashrc
दो असंबंधित परिस्थितियों में पढ़ता है:
- इंटरेक्टिव गोले में जो लॉगिन गोले नहीं हैं;
- गैर-संवादात्मक गोले में, जो गोले में प्रवेश नहीं करते हैं, यदि बैश को लगता है कि यह इसके द्वारा लागू किया गया है
rshd
या sshd
।
जब आप ssh पर कमांड चलाते हैं, तो आप दूसरे मामले में होते हैं। आप अपनी प्रोफ़ाइल को पढ़ने /etc/profile
और पढ़ने .profile
से व्यवस्थित कर सकते हैं .bashrc
। अपने में निम्नलिखित कोड शामिल करें ~/.bashrc
:
case $- in
*i*) :;; # this is an interactive shell, fine
*) # This is not an interactive shell! This must be a non-interactive remote shell session.
. /etc/profile; . ~/.profile
return;;
esac
ydisplay
काम चल रहा है ?ssh 127.0.0.1 /usr/app/cpn/bin/ydisplay
काम करता है ?