【问题标题】:Unreachable command in a shell script code while installing Oh My Zsh安装 Oh My Zsh 时 shell 脚本代码中无法访问的命令
【发布时间】:2016-09-18 12:28:44
【问题描述】:

这是我的 sample1.sh

#!/bin/bash

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
echo "foo"

输出:

这是我的 sample2.sh

#!/bin/bash

rm -rf ~/.oh-my-zsh
rm ~/.zshrc

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
echo "foo"

输出:

如您所见,上述 sn-ps 之间的唯一区别在于以下几行:

rm -rf ~/.oh-my-zsh
rm ~/.zshrc

问题:为什么我只能看到 foo只有 已经安装了 OMZ? https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh里面有什么特别之处,在检测到OMZ不存在可以安装后,安装成功后,就没有继续到达我的foo了?

显然,echo "foo" 只是突出一般问题的一个示例。

在脚本的最终构建中,我想要实现的是在安装 OMZ 后通过调用简单地启用一些插件:

sed -i '' -e 's/^plugins=.*/plugins=(git, sublime)/' ~/.zshrc

这条线只有在我手动触发时才能正常工作。问题是一旦安装了 OMZ,它就永远不会调用sed。谢谢指出,我不明白的问题在哪里。

【问题讨论】:

    标签: bash shell oh-my-zsh


    【解决方案1】:

    OMZ 的安装脚本的一部分是将当前的 shell 切换到 sh 与行 env zsh。我相信这基本上导致您的脚本分叉 ZSH 并且从未真正完成运行。如果您在 ZSH shell 中exit,那么它应该会继续正常运行。

    【讨论】:

    • 谢谢。事实上exit 允许触发脚本的其余部分,但是只有在手动提供exit 时才有效,这不是我最初想要的。我对这个问题的解决方法是简单地将 OMZ 安装后的所有内容提取到单独的文件中。为努力投票。
    【解决方案2】:

    Oh-my-zsh 将分叉当前进程。要修复,只需将其从脚本中删除即可。

     sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sed "s/env zsh//g")"
    

    【讨论】:

      【解决方案3】:

      感谢@mgild 的想法,这正是我想要的。只有一件事 - 命令应该是:

      sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sed "s/env zsh.*//g")"
      

      这样 sed 会删除整个子字符串,而不仅仅是“env zsh”子字符串。

      【讨论】:

        猜你喜欢
        • 2017-12-20
        • 2015-08-23
        • 2015-12-23
        • 2021-09-27
        • 2016-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多