उन्नयन समस्या के संबंध में @ mklement0 [द्वारा पोस्ट की गई उत्कृष्ट व्याख्या और समाधान के लिए यहां देखें bash
।
मुझे अपने सिस्टम (OS X 10.10.1) के विपरीत काम करने में इसी तरह की समस्या थी: bash
मैंने स्थापित करने के बाद फिर से डिफ़ॉल्ट लॉगिन शेल oh-my-zsh
बनाया, जिसने zsh
डिफ़ॉल्ट बनाया , और फिर bash
होमब्रेव का उपयोग करके 3.2.53 से 4.3.30 तक अपग्रेड किया ( क्यों Apple एक पुराने bash
संस्करण के साथ Yosemite शिपिंग है ?)।
मुझे लगता है कि SHELL
पर्यावरण चर प्रतिबिंबित करता है लेकिन उपयोगकर्ता के लिए वास्तविक डिफ़ॉल्ट लॉगिन शेल को नियंत्रित नहीं करता है । उदाहरण के लिए, यदि, कहा जाए, तो bash
आपका डिफ़ॉल्ट था और आप bash
टर्मिनल से एक नई शेल विंडो खोलते हैं, फिर $ export SHELL="/bin/zsh"; echo "$SHELL"
दिखाएगा /bin/zsh
लेकिन कोई वास्तविक परिवर्तन नहीं होगा क्योंकि यदि आप टर्मिनल से एक नई शेल विंडो खोलते हैं और ऐसा करते हैं, $ echo $0
तो आप देखेंगे -bash
( $0
नाम और पथ सम्मिलित है) कमांड की जिसने शेल विंडो शुरू की, इस मामले में bash
, और इसके -
बगल में यह इंगित करता है कि यह एक लॉगिन शेल है)।
जैसा कि @ mklement0 ने बताया कि उपयोगकर्ता के लिए वास्तविक डिफ़ॉल्ट लॉगिन शेल UserShell
सिस्टम के आंतरिक डेटाबेस में उपयोगकर्ता के रिकॉर्ड में संपत्ति द्वारा नियंत्रित किया जाता है - यह कमांड लाइन उपयोगिता का उपयोग करके अद्यतन और अद्यतन किया जा सकता है dscl
। शेल विंडो खोलते ही यह जानकारी आपके टर्मिनल ऐप पर पहुंच जाएगी।
इसे सेट करने के लिए chsh -s /bin/zsh
इस UserShell
संपत्ति को क्या बदल रहा है zsh
- आप इसे dscl . -read /Users/$USER/ UserShell
तुरंत बाद में जांच कर सकते हैं , और आप देखेंगे UserShell: /bin/zsh
। लेकिन परिवर्तन वर्तमान विंडो में प्रभावित नहीं होता है, जब तक आप exec su - $USER
@ mklement0 द्वारा सुझाए गए अनुसार कुछ नहीं करते हैं , या जब तक आप खोल विंडो को बंद और खोल नहीं देते हैं।
/etc/shells
? मैनुअल बताता है कि यदि आपके द्वारा निर्दिष्ट शेल उस फ़ाइल में नहीं है, तो इसे एक मानक शेल नहीं माना जाता है।