如何使用自定义 Zsh 安装来安装 Oh My Zsh?

ele*_*t15 4 linux ssh zsh oh-my-zsh

所以,我刚刚按照此处的建议,我可以通过 SSH 访问(但重要的是,没有 root 访问权限)的机器上安装了 zsh 。然后我继续尝试安装 Oh My Zsh,并收到以下消息:

Zsh is not installed! Please install zsh first!
Run Code Online (Sandbox Code Playgroud)

这并不令人惊讶。检查安装脚本后,检查是否安装了 zsh 的代码是:

CHECK_ZSH_INSTALLED=$(grep /zsh$ /etc/shells | wc -l)
if [ ! $CHECK_ZSH_INSTALLED -ge 1 ]; then
    printf "${YELLOW}Zsh is not installed!${NORMAL} Please install zsh first!\n"
    exit
fi
unset CHECK_ZSH_INSTALLED
Run Code Online (Sandbox Code Playgroud)

因此,如果没有 root 访问权限,我无法编辑 /etc/shells.conf 文件。还需要注意的是,当我通过 SSH 进入这个系统时,我不一定登录到同一台物理机器;相反,我登录到几台机器之一,我的主目录被复制到其中。目前我的代码中.profile有添加~/bin到我的代码$PATH并在登录时启动 zsh。

基本上,有没有办法解决这个问题?我认为可以修改安装脚本以适应将 zsh 安装到 ~/bin/zsh 的情况,但是如果不是不明智的话,仅仅盲目地删除检查逻辑当然似乎没什么。

Ada*_*hon 9

检查逻辑只是为了防止chsh在安装结束时失败。如果您的zsh二进制文件未在 中列出/etc/shells,您将无法chsh用于更改您的登录 shell。在这种情况下,~/bin/zsh从您当前的登录 shell 启动文件之一运行是zsh自动启动的唯一方法。由于~/.profile通常仅用于登录会话,因此应该没问题。您可能希望zsh -l从那里运行以获取登录会话,而不仅仅是交互式会话(加载配置文件的方式不同)。

为了安装oh-my-zsh,您必须从中删除一些代码install.sh:即问题中提到的检查以及它尝试自动运行的位置chsh。或者您只需运行以下两个命令:

git clone --depth=1 https://github.com/robbyrussell/oh-my-zsh.git $HOME/.oh-my-zsh
cp $HOME/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

除非您想将oh-my-zsh安装在其他地方,~/.oh-my-zsh否则不需要其他任何东西。其他一切都install.sh只是:

  • 防止在同一位置覆盖已经存在的oh-my-zsh安装,这git clone无论如何都会阻止
  • 备份~/.zshrc,您可能在全新安装时没有备份
  • 设置登录外壳,无论如何这在您的情况下不起作用
  • 和大量的彩色输出。