繁体   English   中英

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

[英]Unreachable command in a shell script code while installing 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"

输出:

在此处输入图像描述

这是我的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 感谢您指出,我不明白的问题在哪里。

OMZ的安装脚本的一部分是使用env zsh行将当前shell切换到sh。 我相信这基本上是导致您的脚本派生ZSH并从未真正完成运行。 如果您从ZSH Shell exit ,则它应继续正常运行。

Oh-my-zsh将分叉当前进程。 要解决此问题,只需将其从脚本中删除即可。

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

作为一种解决方法,您可以使用&<\/code>并wait<\/code>并行运行安装命令并等待其完成。

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" &
wait
echo "foo"

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM