bash script pare depois de executar o script externo (oh-my-zsh installer.sh)

0

Eu escrevo um script para instalar automaticamente o zsh e definir algumas configurações padrão.

function setup_zsh(){
    echo "####################################"
    echo "setup zsh"

    apt-get install -y zsh git curl
    sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
    # later code would not execute because now enter zsh shell

    writelines 'source /etc/profile' ~/.zshrc

    echo "setup zsh theme"
    if [ -s ~/.zshrc ]; then
        if grep -q 'ZSH_THEME' ~/.zshrc ; then
            sed -i 's/^ZSH_THEME=.*/ZSH_THEME="'${ZSH_THEME}'"/' ~/.zshrc
        else
            echo 'ZSH_THEME="'${ZSH_THEME}'"' >> ~/.zshrc
        fi
    fi
}

Mas achei que quando sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" terminar, ele digitaria zsh shell, para que o código posterior não seja executado. Como faço para contornar esse comportamento?

    
por Mithril 30.09.2017 / 10:28

1 resposta

1

É porque no final esta última linha env zsh faz com que o installer.sh execute um zsh sub-shell; Você pode adicionar e redirecionar 0>/dev/null para sh -c para falhar em executar um sub-shell.

0>/dev/null sh -c "$(curl ....)"

Você pode verificar o comportamento de 0>/dev/null ao executar 0>/dev/null env zsh e enz zsh após a instalação para ver que 0>/dev/null env zsh está impedindo de alternar para zsh shell ou quaisquer outros shells.

Isso também causará falha / impedimento quando você quiser alterar o shell padrão ao solicitar sua senha abaixo.

if hash chsh >/dev/null 2>&1; then
      printf "${BLUE}Time to change your default shell to zsh!${NORMAL}\n"
      chsh -s $(grep /zsh$ /etc/shells | tail -1)
    
por sddgob 30.09.2017 / 12:38