Bash 安装Oh My Zsh时shell脚本代码中无法访问的命令
这是我的样本1.sh:Bash 安装Oh My Zsh时shell脚本代码中无法访问的命令,bash,shell,oh-my-zsh,Bash,Shell,Oh My Zsh,这是我的样本1.sh: #!/bin/bash sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" echo "foo" #!/bin/bash rm -rf ~/.oh-my-zsh rm ~/.zshrc sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/to
#!/bin/bash
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
echo "foo"
#!/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"
输出:
这是我的样本2.sh:
#!/bin/bash
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
echo "foo"
#!/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,?在它检测到OMZ不存在并且可以安装之后,在成功安装之后,它不会继续到达我的foo,这里面有什么特别之处
显然,echo“foo”
只是强调一般问题的一个例子
在脚本的最终构建中,我想要实现的是在安装OMZ后通过调用以下命令启用一些插件:
sed-i'-e's/^plugins=.*/plugins=(git,sublime)/'~/.zshrc
这条线只有在我手动触发时才能正常工作。问题是,一旦安装了OMZ,它就不会调用
sed
。感谢您指出,我不明白的问题在哪里。OMZ安装脚本的一部分是使用env zsh
行将当前shell切换到sh。我相信这基本上是导致您的脚本分叉ZSH,并且从未真正完成运行。如果您从ZSH shell退出,那么它将继续正常运行。Oh my ZSH将分叉当前进程。要修复,只需将其从脚本中删除
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sed "s/env zsh//g")"
谢谢@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”子字符串。谢谢。实际上,
exit
允许触发脚本的其余部分,但是只有当手动提供exit
时,它才起作用,这不是我最初想要的。我解决这个问题的方法是在OMZ安装后将所有内容提取到单独的文件中。投票支持努力。