остановка сценария удара после выполняет внешний сценарий (oh-my-zsh installer.sh)

Я пишу сценарий в автоматическую установку zsh и устанавливаю некоторую конфигурацию по умолчанию.

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
}

Но я нашел когда sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" концы, это ввело бы оболочку zsh, поэтому более поздний код не выполнится. Как я работаю вокруг этого поведения?

0
задан 2 October 2017 в 20:14

1 ответ

Это потому что в конце эта последняя строка env zsh причины installer.sh выполняют a zsh подоболочка; можно добавить и перенаправить 0>/dev/null кому: sh -c приводить его к сбою для выполнения подоболочки.

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

Можно проверить 0>/dev/null поведение при выполнении 0>/dev/null env zsh и enz zsh после установки для наблюдения этого 0>/dev/null env zsh предотвращение для переключения на zsh оболочка или любые другие оболочки.

Это также вызовет для приведения к сбою/предотвращения, когда это захочет изменить оболочку по умолчанию при выяснении у пароля в ниже.

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)
1
ответ дан 2 November 2019 в 04:50

Другие вопросы по тегам:

Похожие вопросы: