作为环境设置脚本的一部分,我们有以下安装 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
然而,对于我们的两个开发人员来说,由于某种原因,脚本在安装 docker 之后和之前fi
(用 's 发现echo
)就默默退出了。usermod
或者命令newgrp
。退出代码为零,我完全困惑为什么这种情况只发生在他们的机器上,除了他们所做的任何个人配置和更改之外,这些机器在功能上应该与其他机器相同。当他们单独运行命令时,根本没有任何问题,然后他们可以重新运行脚本来完成设置。
我检查了断线字符,它们是 LF (\n) 与脚本中其他地方相同。他们运行的是 Ubuntu 18.04。
答案1
原因是newgrp
本质上只是创建一个新的 bash 实例,因此在它退出(从未发生)之前它无法继续执行脚本。本质上与su - $(id -u -n);
您的脚本中的相同