首页 > 解决方案 > Bash/xargs:如何批量分配用户权限?

问题描述

我创建了一个新用户。我当前的用户显然具有以下权利:

$ groups
max adm cdrom sudo dip plugdev lpadmin lxd sambashare

max当前用户帐户的名称在哪里。

我尝试了参数扩展,但输出${groups}为空,所以我只是通过管道将组传递给xargs

$ groups | xargs -I _ sudo usermod -aG _ new_user_name

我收到没有文件夹的错误消息,max adm cdrom sudo dip plugdev lpadmin lxd sambashare因为显然输出groups没有被空格分割。

但正如我所说${groups}的是空的,所以我无法通过管道传输到 xargs。

第二次尝试:

my_arr=(adm cdrom sudo dip plugdev lpadmin lxd sambashare)

$ echo ${my_arr[@]} | xargs -I _ usermod -aG _ new_user_name

即使我没有将参数扩展放在双引号中,数组的参数也不会被拆分。

xargs 仍将管道参数视为一个大字符串adm cdrom sudo dip plugdev lpadmin lxd sambashare

什么是正确的解决方案?

标签: linuxbashubunturights

解决方案


关键问题是您需要告诉xargs一次阅读一个论点。

不太重要的是,您可能不想max在输入中包含usermod.

groups |
# Trim away first token (max)
sed 's/^[^ ]* //' |
# Pass to xargs with -n 1
xargs -n 1 -I _ sudo usermod -aG _ new_user_name

在 Linux 上,您可能需要添加--delimiter ' 'xargs命令行。


推荐阅读