Я пишу сценарий в автоматическую установку 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, поэтому более поздний код не выполнится. Как я работаю вокруг этого поведения?
Это потому что в конце эта последняя строка 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)