您如何在不卸载的情况下“禁用” oh-my-zsh(和zsh)?


16

我正在尝试新的开发环境,包括zsh和oh-my-zsh。现在,我已经安装了oh-my-zsh,默认情况下,它将在我的终端(iTerm2和终端)上启动,始终以zsh和oh-my-zsh上的设置启动。我想知道是否可以“禁用”或停止使用oh-my-zsh的zsh及其设置,而不必卸载oh-my-zsh?知道如何将它们重新打开也很高兴。

目前,我的终端(我认为)自动进入zsh并自动使用oh-my-zsh。我希望对此有更多的控制,并且能够控制使用zsh的时间和使用oh-my-zsh功能的时间。

我还想知道的一件事是,终端应用程序如何知道在启动时开始运行哪个shell。能够控制也很好!

如果您尽可能多地解释您给我的每条命令的“为什么”,那将很有用!:)


我使用的是OSX。不确定这是否重要,但是我倾向于更喜欢更适用于更一般的Unix环境而不是自己的Unix环境的答案。


您要停止使用zsh?还是oh-my-zsh?哪一个?
6

两者兼有。即,当我使用zsh和oh-my-zsh时,我希望能够同时控制两者
Charlie Parker

Answers:


19

您的问题的措词不明确,因此我无法告诉您是要停止使用zsh还是要停止使用oh-my-zsh。我将同时介绍两者。

禁用 zsh

只需运行chsh并选择您之前使用的任何shell。如果您不知道之前使用的是什么shell,那么几乎可以肯定bash。此命令更改与您的用户关联的“登录外壳”。本质上,它将更改您的默认外壳。

您将需要打开一个新的终端窗口以使更改生效。如果这不起作用,则需要注销并再次登录以重新初始化环境。

仅禁用 oh-my-zsh

  1. 检查是否~/.zshrc.pre-oh-my-zsh存在。可能会的。(此文件将在oh-my-zsh安装脚本将您之前的脚本移开时创建.zshrc.zshrc是一个启动文件zsh,类似于.bashrcfor 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

您将需要重新启动外壳程序以使更改生效。


我对我的措辞表示歉意。我相信我已经澄清了。现在清楚了吗?谢谢顺便说一句。
查理·帕克

@CharlieParker是的,我很懒。我将扩大答案,也许会解释一些“为什么”。
2014年

1
@CharlieParker,以防您不注意,我更新了此答案。让我知道是否有任何可以改善的地方。
6

4

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

3

chsh -s / bin / bash

要手动设置新的默认Shell,请执行chsh -s / my / new / shell,例如chsh -s / bin / bash。然后,只需重新打开外壳即可。


2

您可以通过ZDOTDIR在启动zsh之前设置环境变量来告诉zsh从不同目录加载其按用户配置文件。

如果要在不加载配置文件的情况下启动zsh,请设置ZDOTDIR为不存在的目录。如果要跳过系统配置文件(除之外/etc/zshenv),可以运行zsh -f。如果要跳过系统配置文件但运行每个用户的文件,请运行zsh -d

例如,如果您想在不将oh-my-zsh设置为默认值的情况下对其进行测试驱动,请不要将.zshrcoh-my-zsh的内容放入您的主目录中。相反,将其放置在其他位置,例如。在中~/.oh-my-zsh,然后ZDOTDIR=~/.oh-my-zsh zsh在要使用oh-my-zsh时运行。


终端应用程序运行SHELL环境变量指示的外壳。如果未设置此变量,则它们将运行用户数据库(/etc/passwd)中指示的登录shell 。启动终端仿真器时,您可以请求其他应用程序,例如xterm -e fish


0

由于它在@Gilles中有点隐藏,因此无需任何配置即可快速加载zsh的快速方法,例如.zshrc .zshenv等

zsh -f

当您要测试配置中是否有任何东西阻止zsh的某些功能正常工作时,这很有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.