在curl之后需要.zshrc到源文件的最佳代码

在curl之后需要.zshrc到源文件的最佳代码

我在首次运行时设置 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 上,因此您可以分叉它或要求作者这样做。

相关内容