【发布时间】:2021-08-07 14:25:57
【问题描述】:
我创建了一个新用户。我当前的用户显然拥有以下权利:
$ 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
什么是正确的解决方案?
【问题讨论】:
-
你在使用
/bin/sh???数组是 Bash 功能,而不是 POSIXsh。 -
要稍微扩展前面的评论,您需要使用
#!/bin/bash而不是#!/bin/sh(或者不使用数组,并找出不同的方法)。另见Difference betweenshandbash -
我回滚了您的最新编辑,因为它分散了主要问题的注意力,并且包含在常见的常见问题解答中。
-
好吧,我的错。我对我的错误感到非常抱歉。 iBug 的脚本使用
#!/bin/bash。感谢您的努力。我只是一个使用 shell 的初学者。感谢您指点我"Difference between sh and bash"我会阅读和学习。