Necessita do código ideal para .zshrc para o arquivo de origem após o curl

2

Estou tendo problemas com meu arquivo .zshrc para configurar meu zplugin para uma execução inicial. Sua finalidade é buscar o instalador do zplug github, executar a instalação do shell e, em seguida, fornecê-lo.

Este é o meu arquivo .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

E esta é a saída da inicialização do meu terminal:

✔  Checking if your zsh version is newer than 4.1.9 [SUCCEEDED]
✔  Installing zplug to /home/thomas/.zplug [SUCCEEDED]
All processes are successfully completed                     
por dwarfoz 05.11.2018 / 02:48

2 respostas

1

Tente adicionar um |cat . Essa é uma maneira de forçar a espera de processos iniciados em segundo plano. cat em efeito irá esperar por eles enquanto aguarda o final de sua entrada. Isso funciona porque esses processos de segundo plano mantêm o canal cat está lendo de aberto (contanto que sua saída padrão não seja redirecionada). Então:

curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh | cat

O mesmo efeito pode ser alcançado com:

: $(curl -sL --proto-redir -all,https https://raw.githubusercontent.com/zplug/installer/master/installer.zsh | zsh)

Ainda um pipe, mas desta vez, criado por zsh para a substituição do comando.

Não posso deixar de mencionar que a execução de código estrangeiro como esse, como parte de seu ~/.zshrc , me deixa muito desconfortável.

    
por 05.11.2018 / 10:37
1

Olhando o arquivo de origem, parece que esse script executa git clone https://github.com/zplug/zplug.git $ZPLUG_HOME no segundo plano pela função execute() e, não aguardando a conclusão desse processo, anuncia a mensagem SUCCEEDED e sai.

Você tem basicamente duas opções:

  • espere o script criar um arquivo, por exemplo, adicionando while loop, algo como

    while [[ ! -f ~/.zplug/init.zsh ]]; do
       sleep 1
    done
    

    Verifique sua implementação de sleep , se ela suportar números flutuantes, tente sleep 0.1 se o tempo for um problema, ou até mesmo esperar que inotify seja um pouco (marginalmente) mais eficiente.

  • modifique este script de instalação para aguardar por suas tarefas internas. Está no git, então você pode fazer o fork ou pedir ao autor para fazer isso.

por 05.11.2018 / 04:11

Tags