आप इसे अनइंस्टॉल किए बिना ओह-माय-ज़श (और ज़श) को "अक्षम" कैसे करते हैं?


16

मैं zsh और oh-my-zsh सहित नए देव वातावरणों की कोशिश कर रहा था। अब जब मैंने ओह-माय-ज़श स्थापित किया है, तो यह डिफ़ॉल्ट रूप से मेरे टर्मिनलों (iTerm2 और टर्मिनल) पर शुरू होता है, हमेशा ओश-ओ-ज़श से सेटिंग्स के साथ शुरू होता है। मैं सोच रहा था कि क्या ओएच-माय-जेडश को अनइंस्टॉल किए बिना ओएच-माय-जेडश के साथ ज़श और उसके सेटअप का उपयोग "अक्षम" करना या बंद करना संभव था? यह जानना भी अच्छा होगा कि उन्हें वापस कैसे लाया जाए।

वर्तमान में, मेरे टर्मिनल स्वचालित रूप से zsh में जाते हैं (मुझे लगता है) और स्वचालित रूप से ओह-माय-ज़श का उपयोग करते हैं। मैं उस पर और अधिक नियंत्रण रखना चाहता हूं और मुझे दोनों को नियंत्रित करने में सक्षम है, जब zsh का उपयोग किया जा रहा है और जब oh-my-zsh सुविधाओं का उपयोग किया जा रहा है।

एक बात मुझे यह जानने में भी दिलचस्पी है कि टर्मिनल अनुप्रयोगों को कैसे पता चलता है कि कौन सा शेल स्टार्ट अप पर चलना है। यह भी नियंत्रित करने में सक्षम होने के लिए अच्छा होगा!

यदि आप मुझे बताए गए प्रत्येक कमांड के "क्यों" के बारे में जितना समझा सकते हैं, वह उपयोगी होगा! :)


मैं OS X पर हूँ। निश्चित नहीं कि अगर यह मायने रखता है, लेकिन मैं उन उत्तरों को अधिक पसंद करता हूं जो मेरे स्वयं के बजाय अधिक सामान्य यूनिक्स वातावरण पर लागू होते हैं।


आप का उपयोग बंद करना चाहते हैं zsh? या oh-my-zsh? कौन कौन से?
स्ट्रगलर

या तो और दोनों। यानी मैं दोनों को नियंत्रित करने में सक्षम होना चाहता हूं, जब मैं zsh और ओह-माय-zsh का उपयोग कर रहा हूं
चार्ली पार्कर

जवाबों:


19

आपके प्रश्न का शब्दांकन अस्पष्ट है, इसलिए मैं यह नहीं बता सकता कि यदि आप इसका उपयोग zshकरना चाहते हैं या आप उपयोग करना बंद करना चाहते हैं oh-my-zsh। मैं दोनों को कवर करूंगा।

अक्षम करना zsh

बस चलाएं chshऔर जो भी शेल आप पहले उपयोग कर रहे थे उसका चयन करें। यदि आप नहीं जानते हैं कि आप पहले किस शेल का उपयोग कर रहे थे, तो यह लगभग निश्चित रूप से है bash। यह कमांड "लॉगिन शेल" बदलता है जो आपके उपयोगकर्ता के साथ जुड़ा हुआ है। अनिवार्य रूप से, यह आपके डिफ़ॉल्ट शेल को बदलता है।

परिवर्तनों को प्रभावी करने के लिए आपको एक नई टर्मिनल विंडो खोलने की आवश्यकता होगी। यदि यह काम नहीं करता है, तो आपको अपने पर्यावरण को फिर से संगठित करने के लिए लॉग आउट करने और फिर से लॉग इन करने की आवश्यकता होगी।

केवल अक्षम कर रहा है oh-my-zsh

  1. अगर ~/.zshrc.pre-oh-my-zshमौजूद है तो जाँच करें । यह शायद करता है। (जब यह फ़ाइल नहीं बनाई गई है जाएगा oh-my-zshस्थापना स्क्रिप्ट अपने पिछले चले गए .zshrcरास्ते से बाहर। .zshrcके एक स्टार्टअप फ़ाइल है zsh, के लिए इसी तरह .bashrcके लिए bash।)
  2. अगर ऐसा होता है, करते हैं mv ~/.zshrc ~/.zshrc.oh-my-zsh। यह डाल देंगे oh-my-zsh-created .zshrc, रास्ते से बाहर तो हम, मूल बहाल कर सकते हैं करके mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc
  3. यदि यह मौजूद नहीं है, तो ~/.zshrcएक पाठ संपादक में खोलें । उस पंक्ति को खोजें जो कहती है source $ZSH/.oh-my-zshऔर या तो इसे टिप्पणी करें या इसे हटा दें। यह के प्रारंभ को अक्षम कर देगा oh-my-zsh

परिवर्तनों को प्रभावी करने के लिए आपको अपने शेल को पुनरारंभ करना होगा।


मैं अपने शब्दों के बारे में माफी मांगता हूं। मेरा मानना ​​है कि मैंने इसे स्पष्ट किया। क्या यह अब स्पष्ट है? धन्यवाद btw।
चार्ली पार्कर

@CharlieParker हाँ, मैं आलसी हो रहा था। मैं उत्तर का विस्तार करूंगा, शायद "क्यों" का एक सा समझाता हूं।
स्ट्रगलर

1
@CharlieParker अगर आपने ध्यान नहीं दिया, तो मैंने इस उत्तर को अपडेट कर दिया। मुझे बताएं कि क्या कुछ सुधार किया जा सकता है।
स्ट्रगलर

4

ZSH विन्यास स्विचिंग

आप अलग अलग zsh विन्यास चौखटे (ओह-मेरी-zsh, zprezto, आदि) परीक्षण करना चाहते हैं और उन दोनों के बीच स्विच, अपने सबसे अच्छे दांव के लिए सांकेतिक लिंक उपयोग कर रहा है ~/.zsh, ~/.zshrc, ~/.zlogin, ~/.zlogout, ~/.zprofile, और ~/.zshenv। आप प्रत्येक फ्रेमवर्क के लिए एक शेल स्क्रिप्ट बनाना चाह सकते हैं ताकि तेजी से स्विच करने के लिए उन सीमलिंक को बनाया जा सके।

अपने स्वयं के फ़ोल्डरों में अपने ढांचे के विन्यास रखें। प्रत्येक ढांचे के लिए।

  • यदि संभव हो, तो अपने स्वयं के फ़ोल्डर में फ्रेमवर्क स्थापित करें
  • यदि फ्रेमवर्क स्थापना के लिए मजबूर करता है ~/.zsh, तो
    • ~/.zshपहले करंट को सुरक्षित रखें । भी
      • ~/.zshसिमलिंक को हटा दें ; rm ~/.zsh, या
      • ~/.zshफ़ोल्डर को स्थानांतरित करें ;mv ~/.zsh ~/.zsh.backup
    • फ्रेमवर्क इंस्टॉलर चलाएं।
    • फ्रेमवर्क फ़ोल्डर को अपनी निर्देशिका में ले जाएं। उदा mv ~/.zsh ~/.oh-my-zsh
  • प्रत्येक रूपरेखा के लिए दोहराएँ।

एक बार हो जाने के बाद, प्रत्येक फ्रेम के लिए एक शेल स्क्रिप्ट बनाएं, जिससे आवश्यक सीमलिंक बनाए जा सकें। यहाँ zprezto के लिए एक उदाहरण है, क्योंकि मैं पहले से ही इसका इस्तेमाल करता हूँ।

$ mkdir ~/bin
$ cat <<EOF > ~/bin/use-zprezto
#!/bin/bash
SYMLINKS=".zsh .zshrc .zshlogin .zshlogout .zshprofile .zpreztorc .zshenv .zshrc"
CONFIG_HOME="$HOME/.zprezto"

# check for unexpected error conditions
for sym in $SYMLINKS; do
   # report an error and quit if $sym exists and is not a symlink
   [[ -e "$HOME/$sym" -a ! -h "$HOME/$sym" ]] && { echo "error:  '$HOME/$sym' is not a symlink!"; return 1; }
done

# now create the symlinks now that nothing should go wrong
for sym in $SYMLINKS; do
   # remove old symlink if it exists
   [[ -h "$HOME/$sym" ]] && rm -f "$HOME/$sym"
   # create new symlink
   ln -s "$CONFIG_HOME/$sym" "$HOME/$sym"
done

# uncomment next line to start a new zsh shell.  CAUTION: each call is a zsh shell inside a zsh shell.  Too many calls will put you in limbo :D
#/usr/bin/env zsh
EOF

$ chmod 700 ~/bin/use-zprezto

यह स्क्रिप्ट काफी सरल है और इस तथ्य पर निर्भर करती है कि मेरे सभी सिम्बलिंक एक ही पैटर्न के साथ व्यवस्थित हैं। आप हटा सकते हैं और पेस्ट बना सकते हैं और आपके द्वारा सहानुभूति के लिए लूप के बाद लाइनें बना सकते हैं जो पैटर्न का पालन नहीं करते हैं।

इसके बाद, उपयोग ~/bin/use-zprezto--या ~/bin/use-whateverzsh चौखटे के बीच --to स्विच।

ध्यान दें कि परिवर्तन केवल नए zsh गोले में प्रभावी होते हैं, मौजूदा गोले नहीं।

शैल स्विचिंग

यह थोड़ा खतरनाक है, लेकिन अगर आप इतने झुके हुए हैं, तो आप अपने शेल कमांड के लिए सिम्लिंक का उपयोग कर सकते हैं और सिम्लिंक को अपने डिफ़ॉल्ट शेल के रूप में सेट कर सकते हैं। फिर आप use-*अपने डिफ़ॉल्ट शेल को बदलने के लिए उपरोक्त स्क्रिप्ट विधि का पालन कर सकते हैं ।

Zsh के साथ एक उदाहरण के रूप में ...

$ mkdir ~/bin
$ cat <<EOF > ~/bin/use-zsh
#!/bin/bash
# check for valid shell symlink
if [[ ! -h "$HOME/.shell" ]]; then
  echo "error: $HOME/.shell is not a symlink!"
  return 1
fi

# remove existing shell symlink if it exists
[[ -h "$HOME/.shell" ]] && rm -f "$HOME/.shell"

# create new shell symlink, but warn user if this fails!
if ! ln -s /usr/bin/zsh "$HOME/.shell"; then
  echo "ERROR: failed to create $HOME/.shell symlink.  Manually create the symlink or future logins will fail!."
  return 2
fi
EOF

$ chmod 700 ~/bin/use-zsh

यदि यह खतरनाक है, तो यह है कि आप एक उपयोगकर्ता के तहत लॉगिन नहीं कर सकते हैं यदि इसमें संग्रहीत शेल /etc/passwdवैध प्रोग्राम नहीं है। यदि आप सावधान नहीं हैं तो आप अपने आप को अपने खाते से बाहर कर सकते हैं; यानी आपका ~/.shellसिमलिंक टूट गया है या एक इंटरैक्टिव प्रोग्राम की ओर इशारा नहीं करता है। उपयोगकर्ता खाते के साथ यह करने के लिए आपका स्वागत है, लेकिन यह आपके rootखाते के लिए अनुशंसित नहीं है ।

यदि आप अभी भी जारी रखना चाहते हैं, तो

$ ~/bin/use-zsh         # ensures ~/.shell exists for chsh
$ echo "$HOME/.shell | sudo tee -a /etc/shells    # add symlink to system's list of valid shells
$ chsh -s ~/.shell      # changes default shell in /etc/passwd for $USER

3

chsh -s / bin / bash

मैन्युअल रूप से एक नया डिफ़ॉल्ट शेल सेट करने के लिए, chsh -s / my / new / shell, जैसे chsh -s / bin / bash करें। तो बस अपने गोले फिर से खोलना।


2

आप zsh को ZDOTDIRशुरू करने से पहले पर्यावरण चर सेट करके एक अलग निर्देशिका से इसकी प्रति-उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइलों को लोड करने के लिए कह सकते हैं ।

यदि आप अपनी कॉन्फ़िगरेशन फ़ाइलों को लोड किए बिना zsh शुरू करना चाहते हैं, तो ZDOTDIRएक गैर-मौजूद निर्देशिका में सेट करें। यदि आप सिस्टम कॉन्फ़िगरेशन फ़ाइलों को छोड़ना चाहते हैं (इसके अलावा /etc/zshenv), तो आप चला सकते हैं zsh -f। यदि आप सिस्टम कॉन्फ़िगरेशन फ़ाइलों को छोड़ना चाहते हैं, लेकिन प्रति-उपयोगकर्ता फ़ाइलों को चलाएं, चलाएं zsh -d

उदाहरण के लिए, यदि आप इसे डिफ़ॉल्ट बनाने के बिना ओह-माय-ज़श का परीक्षण करना चाहते हैं, तो .zshrcअपने घरेलू निर्देशिका में ओह-माय-ज़श से न डालें । इसके बजाय, इसे कहीं और रखें, जैसे। में ~/.oh-my-zsh, और तब चलाएं ZDOTDIR=~/.oh-my-zsh zshजब आप ओह-माय-ज़श का उपयोग करना चाहते हैं।


टर्मिनल अनुप्रयोग SHELLपर्यावरण चर द्वारा इंगित शेल चलाते हैं । यदि यह चर अप्रभावित है, तो वे उपयोगकर्ता डेटाबेस ( /etc/passwd) में इंगित लॉगिन शेल चलाते हैं । जब आप एक टर्मिनल एमुलेटर शुरू करते हैं, तो आप एक अलग आवेदन का अनुरोध कर सकते हैं xterm -e fish


0

जैसा कि @Gilles में छिपा हुआ है, बिना किसी कॉन्फिग के जैसे zsh को लोड करने के त्वरित तरीके से जवाब दें। .zshrc .zshenv आदि

zsh -f

यह तब उपयोगी होता है जब आप परीक्षण करना चाहते हैं कि क्या आपके कॉन्फ़िगरेशन में कुछ भी zsh की कुछ विशेषता को काम करने से रोक रहा है।

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