ZSH Config Switching
Если вы хотите протестировать различные рамки конфигурации ЗШ (о-мой-ЗШ, 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-фреймворками.
Обратите внимание, что изменения вступают в силу только в новых оболочках zsh, а не в существующих оболочках.
Shell Switching
Это немного опасно, но если вы так склонны, вы можете использовать символическую ссылку для вашей команды оболочки и установить символическую ссылку в качестве оболочки по умолчанию. Затем вы можете следовать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
? который?