这是我的 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"
输出:
如您所见,上述代码段之间的唯一区别在于以下几行:
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
。谢谢你指出,我不明白的问题在哪里。
答案 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”子字符串。