2010-12-18 8 views
7

से शुरू हो जाती है मैं लिनक्स में एक व्यवहार को समझने के लिए एक सरल समस्या है। संक्षेप में, लिनक्स पर यदि मैं अपनी श्ल स्क्रिप्ट को 'डेस्कटॉप शॉर्टकट' से आह्वान करता हूं तो स्क्रिप्ट नवीनतम पर्यावरण चर (bashrc में सेट) नहीं देख सकता है। तो मैं सोच रहा था कि इस शेल स्क्रिप्ट में किस दायरे में स्थित है?पढ़ा नहीं .bashrc जब खोल स्क्रिप्ट डेस्कटॉप शॉर्टकट

एक testcase बनाने के लिए और पुन: पेश:

  1. एक सरल खोल स्क्रिप्ट 'testme.sh' बनाएं:

     
    !/bin/sh 
    echo "Hi This is a test script checking the env var"; 
    echo "TESTVAR = $TESTVAR"; 
    read in 
    echo "Done"; 
    
  2. ऊपर स्क्रिप्ट के लिए डेस्कटॉप शार्टकट बनाएँ।

     
    cd ~/Desktop 
    vi mytest-desktop.desktop 
    
    
    //Contents for mytest-desktop.desktop are : 
    [Desktop Entry] 
    Version=1.0 
    Type=Application 
    Name=TestAbhishek 
    Exec=/home/abhishek/test/hello.sh 
    Terminal=true 
    
  3. अब चर
 
    export TESTVAR=test_this_variable 
  1. खुला एक नया टर्मिनल स्थापित करने के लिए अपने .bashrc फ़ाइल को अद्यतन करने और यह ~/testme.sh 'की तरह पूर्ण पथ का उपयोग स्क्रिप्ट को निष्पादित // यह .bashrc फ़ाइल से परिवर्तनीय 'टेस्टवायर' के मान को देख सकता है।

  2. अब, बस डेस्कटॉप शॉर्टकट पर डबल क्लिक करें और निष्पादित करें। // इसे टर्मिनल खोलना चाहिए और 'टेस्टवायर' के लिए खाली मूल्य को प्रिंट करना चाहिए। // तो मेरा सवाल यह है कि इस शॉर्टकट द्वारा टर्मिनल के लिए माता-पिता कौन है?

मैं RHL पर इस कोशिश की है। मैं इस समस्या के लिए समाधान या डब्ल्यू/ए की तलाश में हूं, उम्मीद है कि कोई जल्द ही मदद कर सकता है।

धन्यवाद, अभिषेक।

उत्तर

11

बैश मैनपेज का मंगलाचरण अनुभाग देखें। यहाँ एक अंश है

बैश एक इंटरैक्टिव लॉगिन शेल के रूप में शुरू हो जाती है, या --login विकल्प के साथ एक गैर-सहभागी शेल के रूप में, यह पहले पढ़ता है और फ़ाइल से आदेश कार्यान्वित जब/etc/प्रोफाइल, अगर वह फ़ाइल मौजूद है। उस फ़ाइल को पढ़ने के बाद, यह लग रहा है ~/.bash_profile, ~/.bash_login, और ~/.profile, में है कि आदेश के लिए, और पढ़ता है और पहले एक है कि मौजूद है और पठनीय है से आदेश निष्पादित करता है। --noprofile विकल्प का उपयोग तब किया जा सकता है जब शेल पर प्रारंभ होता है, इस व्यवहार को रोकता है।

एक लॉगिन खोल बाहर निकलता है, बैश पढ़ता है और, फ़ाइल ~/.bash_logout से आदेश निष्पादित करता है यदि वह मौजूद है।

एक इंटरैक्टिव खोल कि एक लॉगिन खोल शुरू कर दिया है नहीं है, बैश पढ़ता है और अगर कि फ़ाइल मौजूद है ~/.bashrc, से आदेश निष्पादित करता है। यह हो सकता है --norc विकल्प का उपयोग करके अवरुद्ध। --rcfile फ़ाइल विकल्प बैश को ~/.bashrc की बजाय फ़ाइल से को पढ़ने और निष्पादित करने के लिए बाध्य करेगा।

लंबी कहानी संक्षेप में, अगर आप गैर-सहभागी खोल के, कुछ ENV सेट वार्स के लिए तो ~/.bashrc

के बजाय ~/.bash_profile में डाल चाहते हैं
संबंधित मुद्दे