मैं दो अलग-अलग प्रणालियों पर एक ताजा Oneiric इंस्टॉल (यानी अपग्रेड नहीं) चला रहा हूं और समान रूप से संबंधित समस्याओं के सेट में चल रहा हूं।
गुच्छा का सबसे निराशाजनक यह है कि, जब मैं मैक ओएस एक्स से मेरे साथ किए गए .profile और .bashrc का उपयोग करता हूं, तो लाइटडीडीएम के माध्यम से एक्स में लॉगिंग मुझे तुरंत लॉग आउट करता है। मेरा मानना है कि यह इस तथ्य के कारण है कि, "/ बिन / श" को चलाने पर, यह / बिन / डैश के रूप में व्यवहार करता है, लेकिन अभी भी $ SHELL चर / बिन / बैश पर सेट है।
एक्सट्रपलेशन
मेरे पास बहुत बड़ा है .bashrc
। आप चाहें तो इसे यहां देख सकते हैं , लेकिन इसकी सामग्री शायद प्रासंगिक नहीं है, इस तथ्य से अलग कि यह बशीशों से भरा है, और तथ्य यह है कि यह xterm के अंदर या वर्चुअल कंसोल पर बिना किसी त्रुटि के काम करता है।
मेरा .profile
लुक ऐसा है (संक्षिप्त):
case $SHELL in
*bash*)
if [ -f $HOME/.bashrc -a -r $HOME/.bashrc ]; then
. $HOME/.bashrc
fi
;;
esac
अगर मैं LightDM के माध्यम से X में लॉग इन करने का प्रयास करता हूं, तो यह मुझे तुरंत वापस लॉग आउट कर देगा। मुझे .xsession-errors
अपने .bashrc से संबंधित त्रुटियां मिलती हैं जो इस तरह दिखाई देती हैं (संक्षिप्त):
/home/mrled/.bashrc: 103: [[: not found
[: 103: Linux: unexpected operator
[: 274: -P :: unexpected operator
/home/mrled/.bashrc: 520: complete: not found
जैसा कि मैंने कहा, जब मैं एक वर्चुअल कंसोल से बैश चलाता हूं, तो मुझे ये त्रुटियां नहीं मिलती हैं। इसके अलावा, अगर मैं अपने .profile को हटाता हूं, तो मैं X में ठीक लॉग इन कर सकता हूं। (मैं एक वर्चुअल कंसोल में भी लॉग इन कर सकता हूं और startx
काम करने वाले X सत्र को आरंभ करने के लिए उपयोग कर सकता हूं , लेकिन यह निश्चित रूप से एक लंबा समाधान नहीं है।)
हालांकि, मुझे पता चला है कि अगर मैं चलाने /bin/sh -l
, मैं करते त्रुटियों मिलता है। यहाँ एक उदाहरण सत्र है (ध्यान दें: bash prompt मैंने सरल किया है bash>
, और sh प्रॉम्प्ट बस है $
):
bash> echo $SHELL
/bin/bash
bash> echo $BASH_VERSION
4.2.10(1)-release
bash> /bin/sh -l
/home/mrled/.bashrc: 103: [[: not found
[: 103: Linux: unexpected operator
[: 274: -P :: unexpected operator
/home/mrled/.bashrc: 520: complete: not found
$ echo $SHELL
/bin/bash
$ echo $BASH_VERSION
$
Q1: ऐसा क्यों हो रहा है?
मैं समझता / समझती हूं कि बिन / श अब बश के बजाय पानी का छींटा मारने की ओर इशारा करता है , लेकिन अगर यह सच है, तो $SHELL
अभी भी क्यों लौट रहा है /bin/bash
?
Q2: मैं इसके आसपास काम करने के लिए क्या कर सकता हूं?
क्या इसके आसपास काम करने का कोई तरीका है? मैं अपनी प्रोफ़ाइल लोडिंग रखना चाहता हूं .Bashrc ताकि मुझे लॉगिन और नॉन-लॉगिन दोनों गोले पर समान वातावरण मिले, लेकिन जाहिर है कि मैं केवल इसे बैश के लिए लोड करना चाहता हूं, न कि बिन / श मास्किंग को बैश के रूप में।
आपने ऊपर BASH_VERSION चर की सामग्री में अंतर देखा होगा। मैंने कुछ इस तरह से अपने .profile को लपेटने की कोशिश की है:
if [ -n $BASH_VERSION ]; then
# the rest of my .profile as above
fi
-n
परीक्षण से ऊपर सत्र में सच लौट जाना ही अगर स्ट्रिंग की लंबाई गैर-शून्य है, फिर भी, भले ही, जब मैं चल रहा हूँ के तहत /bin/sh -l
यह $ BASH_VERSION के लिए एक खाली स्ट्रिंग, जब यह इस तरह मेरी .profile में शामिल है रिटर्न , यह परीक्षा पास करता है! यह उन्हें मेरे .bashrc स्रोत के लिए आगे बढ़ाता है और मुझे पहले जैसी त्रुटियां देता है।
अब मैं वास्तव में उलझन में हूँ ।
$SHELL
/etc/passwd
(या getent passwd
) में अंतिम क्षेत्र जो भी हो ।
~/.profile
, बैश-विशिष्ट चीजों को अंदर रखना चाहिए ~/.bashrc
और ~/.bash_profile
दोनों को स्रोत होना चाहिए ।
dash -l
भी दर्शाता है ।$SHELL
/bin/bash