如何在不注销/登录的情况下将用户添加到组 - Bash 脚本

Dea*_*utt 6 bash shell usergroups logout docker

我搜索过,在其他任何地方都找不到这个答案。对于没有脚本经验的人来说,如果这是一个菜鸟问题,我深表歉意。

我正在尝试创建一个 bash 脚本来设置一个服务器,其中包含应用程序所需的所有软件。简而言之,在安装 docker 时,我需要将当前用户添加到 docker 组“usermod -aG docker”,然后从那里拉一些容器。

我遇到的问题是,因为我已将该用户添加到一个组中,所以他们需要先注销并重新登录,然后才能获得在脚本中稍后执行任何操作的任何权限。这当然会破坏脚本并结束 shell 会话。有没有办法在同一个脚本中注销并重新登录,或者事情需要变得更复杂一些?

感谢任何人对此的帮助。希望这对某人来说是一个简单的答案。

小智 10

使用newgrp命令登录到新组。

newgrp 的工作方式是更改其调用者的组标识,类似于登录。同一个人保持登录状态,当前目录不变,但对文件的访问权限的计算是针对新的组 ID 执行的。

因此,对于您的情况,您将使用:

# usermod -aG docker user
# newgrp docker
Run Code Online (Sandbox Code Playgroud)

检查您的新主要组,它应该是 docker:

$ id -g
989
Run Code Online (Sandbox Code Playgroud)

从 /etc/group 确认

$ cat /etc/group | grep `id -g`
docker:x:989:jmutai
Run Code Online (Sandbox Code Playgroud)

这应该可以解决问题。


Ser*_*kiy 0

据我所知 - 不。为了避免这个问题,我个人使用ansible(ansible使用SSH)。将用户添加到组后断开连接,重新连接并继续脚本。