उन्नयन समस्या के संबंध में @ 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? मैनुअल बताता है कि यदि आपके द्वारा निर्दिष्ट शेल उस फ़ाइल में नहीं है, तो इसे एक मानक शेल नहीं माना जाता है।