इस फ्लोचार्ट की व्याख्या करने में
मैंने पाया कि आदमी बैश में:
जब बैश को एक इंटरेक्टिव लॉगिन शेल के रूप में, या - क्लोजर विकल्प के साथ एक गैर-इंटरैक्टिव शेल के रूप में लागू किया जाता है, तो यह पहले फ़ाइल / आदि / प्रोफाइल से कमांड को पढ़ता है और निष्पादित करता है, यदि वह फ़ाइल मौजूद है।
जिसमें कहा गया है कि इंटरेक्टिव लॉगइन गोले /etc/profile
(बिना - नोप्रोफाइल) पढ़े
इसके अलावा, गैर-इंटरेक्टिव गोले विकल्प के साथ --login
पढ़ें/etc/profile
ऐसा लगता है कि कुछ संभव लॉगिन गोले (जिसमें $0
शुरू होता है -
) को छोड़ दिया जा रहा है जो गैर-संवादात्मक हो (एक स्क्रिप्ट चलाएं, जितना संभव हो उतना सरल date
) नहीं पढ़ सकता (स्रोत) /etc/profile
।
इस विचार की पुष्टि या खंडन करने के लिए:
पहले मैंने उपयोग करने की कोशिश की su -l -
, जो -
पहले चरित्र के रूप में एक लॉगिन शेल शुरू करता है, लेकिन मैं इसे गैर-संवादात्मक बनाने में विफल रहता हूं (और इसकी जांच करने के लिए परीक्षण प्रस्तुत करने में सक्षम हो)।
जैसे कोई बुला रहा हो
$ bash -c 'date' -bash
लॉगिन शेल होने की सूचना नहीं देता है (भले ही पहला वर्ण हो -
)।
विवरण प्रकट करने के लिए इसे आज़माएं:
$ bash -c 'echo "$0 $- ||$(shopt -p login_shell)||";date' -bash -bash hBc ||shopt -u login_shell|| Fri Aug 19 06:32:31 EDT 2016
$0
एक है-
पहली चरित्र के रूप में, कोईi
के मूल्य में (सहभागी)$-
लेकिन यह एक के रूप में दर्ज नहीं किया जाताlogin_shell
(-u)। इस मामले में, / etc / प्रोफ़ाइल पढ़ा नहीं गया था, लेकिन मुझे यकीन नहीं है कि यह सही परीक्षा है।
इस उत्तर में "दुर्लभ गैर-संवादात्मक लॉगिन गोले" का भी उल्लेख है, जो इस प्रश्न के लिए पर्याप्त विशिष्ट नहीं है।
इस आदमी के समापन कि है /etc/profile
हमेशा पढ़ा जाता है।
सारांश तालिका पढ़ें: दोनों इंटरैक्टिव और गैर-इंटरैक्टिव लॉगिन गोले पढ़ें /etc/profile
और, यदि इस पृष्ठ के उदाहरण सही हैं:
Some examples
$ su bob # interactive non-login shell
$ su - bob # interactive login shell
$ exec su - bob # interactive login shell
$ exec su - bob -c 'env' # non-interactive login shell
$ ssh bob@example.com # interactive login shell, `~/.profile`
$ ssh bob@example.com env # non-interactive non-login shell, `~/.bashrc`
पढ़ी गई exec su - bob -c 'env'
रिपोर्टों का परीक्षण /etc/profile
।
संक्षेप में:
क्या एक गैर-संवादात्मक लॉगिन शेल (जिसे - एल्गिन या -एल के साथ नहीं कहा जाता है) होना संभव है?
और अगर सच है, तो क्या यह /etc/profile
फ़ाइल पढ़ रहा है?
यदि उपरोक्त सत्य है, तो हमें यह निष्कर्ष निकालना होगा कि सभी लॉगिन गोले [संवादात्मक (या नहीं)] पढ़ें / आदि / प्रोफ़ाइल (बिना --noprofile
विकल्प के)।
नोट: यह पता लगाने के लिए कि / etc / प्रोफाइल पढ़ी जा रही है, बस इस कमांड में फाइल की शुरुआत में जोड़ें:
echo "'/etc/profile' is being read"
--login
विकल्प का उपयोग कर रहा है। दूसरे के लिए, अगर मुझेexec -a "-bash" "bash" <<<"shopt -p login_shell; echo $0 $-"
मिलता है (सी qoutes में एन्कोडेड)$'/etc/profile read\nshopt -s login_shell\nbash himBH'
तो, यह लॉगिन है लेकिन यह इंटरैक्टिव है। हमें लॉगिन और गैर-संवादात्मक चाहिए । ऐसा क्या है जो मुझे याद आ रहा है?