我在首次运行时设置 zplugin 时遇到 .zshrc 文件问题。其目的是从 zplug github 获取安装程序,运行 shell install,然后获取它。
这是我的 .zshrc 文件:
# Check if zplug is installed
if [[ ! -d ~/.zplug ]]; then
curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh
fi
source ~/.zplug/init.zsh
这是启动终端的输出:
✔ Checking if your zsh version is newer than 4.1.9 [SUCCEEDED]
✔ Installing zplug to /home/thomas/.zplug [SUCCEEDED]
All processes are successfully completed
答案1
尝试添加一个|cat
.这是一种强制等待在后台启动的进程的方法。cat
实际上会在等待输入结束的同时等待它们。这是有效的,因为这些后台进程使管道保持cat
打开状态(只要它们的标准输出不被重定向)。所以:
curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh | cat
可以通过以下方式实现相同的效果:
: $(curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh)
仍然是一个管道,但这一次是zsh
为命令替换而创建的。
我忍不住提到,运行这样的外国代码作为你的一部分~/.zshrc
让我非常不舒服。
答案2
查看源文件,似乎该脚本git clone https://github.com/zplug/zplug.git $ZPLUG_HOME
通过函数在后台运行execute()
,并且不等待该过程完成,就宣布消息SUCCEEDED
并退出。
您基本上有两个选择:
等待脚本创建文件,例如通过添加 while 循环,类似
while [[ ! -f ~/.zplug/init.zsh ]]; do sleep 1 done
检查您的
sleep
实现,如果它支持浮点数,则尝试sleep 0.1
时间是否有问题,或者甚至等待 inotify 来提高效率(稍微)。修改此安装脚本以等待其内部作业。它位于 git 上,因此您可以分叉它或要求作者这样做。