在' usermod -aG '之后重新记录非交互式bash脚本



有些命令需要用户在一个组中才能执行。我正在运行一个非交互式bash脚本script.sh,如下所示

#!/bin/bash
sudo usermod -aG $USER docker
# this line requires user logging to succeed
docker ps

当第一次调用脚本bash script.sh时,docker ps行会抱怨权限不足,因为sudo usermod -aG $USER docker行修改的新的组成员关系需要用户重新登录shell才能生效。

我的问题:是否有一种方法可以触发重新登录在一个非互动的方式?

当您对用户进行更改时,如添加,删除组,您将不得不从当前会话注销,然后,您将能够使用docker命令没有任何问题。如果您使用的是终端,另一个解决方案是使用su命令。例如,您的脚本可以像这样:

#!/bin/bash
sudo usermod -aG $USER docker
su - $USER #this line is used to login with the $USER as a login shell

docker ps命令在这个脚本中不起作用,我忘了提到,当您运行su - $USER时,您必须在登录shell中键入该命令。但是,还有另一种解决方案,您可以为su命令使用-c选项。例如:

su - $USER -c "docker ps"

或者,如果您想使用多个命令,您可以尝试在每个脚本的末尾使用分号:

su - $USER -c "docker ps;docker images;..."

或者,如果您有几个命令,您可以将它们保存在一个文件中,并将文本作为-c选项的参数发送:

在你的文本文件中可能是(dockerscripts.txt):

docker ps
docker images
docker info

su命令可能是:

su - $USER -c "$(cat dockerscripts.txt)"

检查登录用户的当前组的提示是使用命令groups所以,如果你试着这样做:

sudo usermod -aG $USER docker
groups # this will display the current groups of $USER but the `docker` group will not be there yet
su - $USER 

在该命令之后,您将进入登录shell,因此您必须键入命令groups,当您运行它时,这将显示$USER的当前组,包括docker组。

注意:当您从登录shellsu - $USER注销时,组将不再存在,所以如果您想使用docker命令,您将不得不再次使用su - $USER。使用新组的有效方法是从会话注销(如果您使用的是桌面环境)。

您可以查看此链接以获取更多有用信息:

最新更新