ZSH配置切换
如果你想测试不同的zsh配置框架(哦,我的-的zsh,zprezto等)以及它们之间的切换,最好的办法是使用符号链接~/.zsh
,~/.zshrc
,~/.zlogin
,~/.zlogout
,~/.zprofile
,和~/.zshenv
。您可能希望为每个框架创建一个shell脚本,以创建那些符号链接,以便更快地进行切换。
将您的框架配置放在自己的文件夹中。对于每个框架。
- 如果可能,将框架安装在其自己的文件夹中,否则
- 如果框架强制安装到
~/.zsh
,则
~/.zsh
首先保护电流。要么
- 删除
~/.zsh
符号链接;rm ~/.zsh
, 要么
- 移动
~/.zsh
文件夹;mv ~/.zsh ~/.zsh.backup
- 运行框架安装程序。
- 将框架文件夹移动到其自己的目录。例如
mv ~/.zsh ~/.oh-my-zsh
。
- 对每个框架重复上述步骤。
完成后,为每个框架创建一个Shell脚本以创建必要的符号链接。这是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中生效,在现有的shell中无效。
外壳切换
这有点危险,但是如果您愿意,可以在shell命令中使用符号链接,并将符号链接设置为默认外壳。然后,您可以按照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
?哪一个?