MacOSX में ZSH डिफ़ॉल्ट शेल बनाना [बंद]


98

मैंने अपने मैक पर zsh इंस्टॉल किया। और अब मैं इसे बैश के बजाय डिफ़ॉल्ट शेल बनाना चाहता हूं। लेकिन मैं निम्नलिखित त्रुटि में भाग रहा हूं:

$ echo $SHELL
/bin/bash
$ chsh -s /usr/bin/zsh
Changing shell for harshamv.
Password for harshamv:
chsh: /usr/bin/zsh: non-standard shell

1
chsh -lआउटपुट क्या करता है? (यदि वह काम नहीं करता है तो क्या सामग्री हैं /etc/shells?) क्या आपको यकीन है कि यह विफल हो रहा है और सिर्फ चेतावनी नहीं? क्या /usr/bin/zshवहाँ जोड़ने से यह काम हो जाता है?
इटन रीसनर

1
chsh: विकल्प के लिए तर्क की आवश्यकता होती है - l उपयोग: chpass [-l लोकेशन] [-u difname] [-s shell] [उपयोगकर्ता]
हर्षा MV

/ बिन / बाश / बिन / csh / बिन / ksh / बिन / श / बिन / tsh / बिन / zsh
हर्ष एमवी

इसमें गलत क्या है /bin/zsh?
jxh

1
डिफ़ॉल्ट शेल को zsh में बदलने का आधिकारिक तरीका है। Apple दस्तावेज़ देखें "अपने मैक पर डिफ़ॉल्ट शेल के रूप में zsh का उपयोग करें" support.apple.com/en-ca/HT208050
Anthonyeef

जवाबों:


86

3 आसान चरण:

  1. which zshयह आपको zsh के लिए अपना रास्ता देता है
  2. chsh -s /bin/zshअगर अलग है तो फिर या अपने zsh के लिए पथ बदलें
  3. अपनी मशीन को पुनरारंभ करें

हाँ जो काम किया। क्या यह योसेमाइट विशिष्ट है?
हर्षा एमवी

2
नहीं, मुझे नहीं लगता, यह सिर्फ आपकी जानकारी के लिए था :)
क्वेंटिन पेरेज़

8
उसी पुराने सवाल पर एक और प्रासंगिक टिप्पणी जो समस्या /usr/bin/zshको /etc/shellsहल करने के लिए जोड़ने के लिए कहती है।
ब्रिस

यह सही काम करता है
ओल्कुनमुस्तफा

1
इसे / etc / गोले के अनुसार सेट करें! '$ नैनो / आदि / गोले' के साथ zsh पथ की तलाश करें। 10.12.2 को / usr / bin / zsh के बजाय मेरा / बिन / zsh पर था
oikonomopo

187

सही उत्तर में आपकी समस्या का समाधान होना चाहिए:

chsh: / usr / bin / zsh: गैर-मानक शेल

ऐसा होने का कारण यह है क्योंकि chshफ़ाइल / etc / गोले में परिभाषित किए गए गोले को केवल स्वीकार करेंगे, जैसा कि आप इसके लिए मैनुअल पढ़कर देख सकते हैं chsh:

chsh सिस्टम पर किसी भी निष्पादन योग्य फ़ाइल के पूर्ण पथनाम को स्वीकार करेगा। हालाँकि, यह चेतावनी जारी करेगा यदि शेल / etc / गोले फ़ाइल में सूचीबद्ध नहीं है।

इस समस्या को हल करने और zsh को डिफ़ॉल्ट शेल बनाने के लिए, आपको इस प्रकार होना चाहिए:

$ sudo echo "$(which zsh)" >> /etc/shells
$ chsh -s $(which zsh)

जाहिर है, मुझे लगता है कि zsh यहाँ अपने रास्ते में है। यह समाधान भी काम करेगा यदि आप, उदाहरण के लिए, के zshसाथ नवीनतम स्थापित करने के लिए चुनें brew install zsh

संपादित करें (टिप्पणी के लिए ThisIsFlorianK के लिए धन्यवाद) :

आपके शेल सेटअप के आधार पर आपको एक संदेश मिल सकता है /etc/shells: Permission denied। आप इस मुद्दे के बारे में जानकारी यहाँ पा सकते हैं इसके चारों ओर काम करने के लिए, इसके बजाय निम्नलिखित का उपयोग करें:

$ sudo sh -c "echo $(which zsh) >> /etc/shells"
$ chsh -s $(which zsh)

4
मेरी राय में स्वीकृत उत्तर की तुलना में यह अधिक सटीक है। मान लेना zsh / usr / bin / zsh पर स्थापित है, अन्य उत्तर काम नहीं करते हैं। उन्होंने ओपी के लिए काम किया क्योंकि डिफ़ॉल्ट रूप से, Apple zsh को / bin / zsh पर स्थापित करता है। हालांकि, अगर आप homebrew के zsh (जो / usr / स्थानीय / bin / zsh के तहत स्थापित किया गया है) का उपयोग करना चाहता था, यह उचित तरीके से यह करने के लिए किया जाएगा
verboze

मुझे "बैश: / etc / गोले मिले हैं: अनुमति से वंचित"। सिस्टम प्रेफरेंस के जरिए जवाब ने मेरे लिए काम किया।
रिकार्डो स्टुवेन

44
यदि आप /etc/shells: Permission denied==> इसके बजाय करते हैं: sudo sh -c "echo $(which zsh) >> /etc/shells"
ThisIsFlorianK

1
stackoverflow.com/a/44547726/99834 - सिस्टम फ़ाइलों के साथ गड़बड़ किए बिना काम किया। एक ही ऑपरेशन करने के लिए केवल एक चीज गायब सीएलआई वर्सन है।
सोरिन

@ सोरिन क्या यह घटिया बर्बरता है या उत्तर के साथ वास्तव में कुछ गलत है? सिस्टम फाइलें एक कारण के लिए संपादन योग्य पाठ फाइलें हैं। chshएक कारण से प्रति डिफ़ॉल्ट उपलब्ध है। यद्यपि समान चीज़ को पूरा करने के लिए मेनू के भार के माध्यम से क्लिक करने में स्वाभाविक रूप से कुछ भी गलत नहीं है, लेकिन यह न केवल अस्थिर और त्रुटि प्रवण है, बल्कि इसमें भ्रामक भी है कि यह उन उपयोगकर्ताओं से छुपाता है जहां से परिवर्तन आ रहा है।
डॉम

52

मैं निम्नलिखित कार्य करके इसे प्राप्त करने में सक्षम था:

  1. सिस्टम वरीयताएँ पर जाएँ
  2. "उपयोगकर्ता और समूह" पर क्लिक करें
  3. परिवर्तन करने के लिए लॉक पर क्लिक करें।
  4. वर्तमान उपयोगकर्ता -> उन्नत विकल्प पर राइट क्लिक करें
  5. ड्रॉपडाउन में लॉगिन शेल को / bin / zsh में बदलें।
  6. एक नया टर्मिनल खोलें और साथ सत्यापित करें echo $SHELL

4
यदि आप होमशॉ के माध्यम से zsh स्थापित करते हैं तो यह zsh को अंदर ले जाएगा /usr/local/bin/zsh। इसलिए आप संपादित करने की आवश्यकता होगी /etc/shellssudo के तहत और के लिए एक प्रवेश जोड़ने /usr/local/bin/zshसे पहले आप zsh निष्पादन योग्य है कि स्थापित hombrew चयन कर सकते हैं
Baldy

7

अपने काम मैकबुक पर मुझे यह करना पड़ा:

sudo chsh -s /usr/local/bin/zsh my_user_name

फिर मुझे .bash_profileहर बार खोलने पर अपने टर्मिनल स्विच को ज़ेड-शेल में बनाने के लिए एक फाइल बनानी पड़ी:

touch ~/.bash_profile
echo 'export SHELL=$(which zsh)' >> ~/.bash_profile
echo 'exec $(which zsh) -l' >> ~/.bash_profile

अंतिम विचार यहाँ से उधार लिया गया था ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.