Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 安装Oh My Zsh时shell脚本代码中无法访问的命令_Bash_Shell_Oh My Zsh - Fatal编程技术网

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

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

这是我的样本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/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安装后将所有内容提取到单独的文件中。投票支持努力。