安装Oh My Zsh时shell脚本代码中无法访问的命令

时间:2016-05-21 07:43:21

标签: bash shell oh-my-zsh

这是我的 sample1.sh

#!/bin/bash

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

输出:

enter image description here

这是我的 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"

输出:

enter image description here

如您所见,上述代码段之间的唯一区别在于以下几行:

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

问题:为什么我在安装OMZ时能够看到 foo ?在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。谢谢你指出,我不明白的问题在哪里。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

感谢@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”子字符串。