A razão é que newgrp
é essencialmente apenas criar uma nova instância bash e como resultado até sair (nunca acontecer) não pode continuar a execução do script. Essencialmente o mesmo que se você tivesse su - $(id -u -n);
em seu script
Como parte de um script de configuração do ambiente, temos o seguinte snippet que instala o docker:
if [ ! "$(docker -v)" ]; then
infoMessage "Setting up Docker..."
echo "Updating system packages.."
sudo apt-get update
echo "Installing dependencies..."
sudo apt -y install apt-transport-https ca-certificates curl software-properties-common
echo "Adding GPG key..."
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
echo "Adding docker repository..."
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-cache policy docker-ce
echo "Installing docker engine..."
sudo apt-get -y install docker.ce
sudo usermod -aG docker ${USER}
newgrp docker
fi
No entanto, para dois de nossos desenvolvedores, por algum motivo, o script sai silenciosamente logo após a instalação da janela de encaixe e antes da fi
(encontrou isso com echo
's). O comando usermod
ou newgrp
. O código de saída é zero e estou completamente perplexo a respeito de por que isso está acontecendo consistentemente apenas em suas máquinas, que devem ser funcionalmente idênticas a outras, além de quaisquer configurações pessoais e alterações feitas por eles. Quando eles executavam os comandos individualmente, não havia problemas e eles podiam executar novamente o script para concluir a configuração.
Eu verifiquei os caracteres breakline, eles são LF (\ n) como em qualquer outro lugar no script. Eles estão executando o Ubuntu 18.04.
A razão é que newgrp
é essencialmente apenas criar uma nova instância bash e como resultado até sair (nunca acontecer) não pode continuar a execução do script. Essencialmente o mesmo que se você tivesse su - $(id -u -n);
em seu script
Tags docker ubuntu shell-script group