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-whatever
zsh चौखटे के बीच --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
zsh
? याoh-my-zsh
? कौन कौन से?