我已经尝试了getent,group命令,id -Gn $ user和一些sed组合,但我认为我无法实现与其他程序员的联系。
我希望能够打印出来:group abc123
产量
abc123:devops构建测试设计
预期输出
组:
- devops
- 建造
- 测试
- 设计
答案 0 :(得分:4)
回应@Chris的comment
这仅适用于名称中没有空格的组!
我应该提到@ c4f4t0r所接受的解决方案和@bibi的解决方案在大多数情况下都适用。我正在运行Cygwin,方程的Windows
部分可能是我更频繁地遇到这个问题的原因。尽管如此,在普通Linux中我可以使用非标准字符制作一个组(我认为),因此我将为具有空格的组名提供解决方案。太空总能让生活变得有趣!
我会快速举例说明空间导致问题。要查看包含空格的组名,我们会查看id
$ id
uid=1(me) gid=545(Users)
groups=545(Users),66049(CONSOLE LOGON),11(Authenticated Users),
4095(CurrentSession),66048(LOCAL)
(注意:我确实在StackOverflow上让输出更加令人满意。)
由此我们看到这些组是{'Users', 'CONSOLE LOGON', 'Authenticated Users', 'CurrentSession', 'LOCAL'}
在这种情况下,我们可以看到accepted solution的问题。
$ echo "groups:" ; for i in $(id -Gn);do echo " - $i" ;done
groups:
- Users
- CONSOLE
- LOGON
- Authenticated
- Users
- CurrentSession
- LOCAL
有几个小组将他们的名字分开了。要获得我们想要的输出,我们需要使用id命令,该命令采用--zero
(-z
)标志。有关传递给id
的所有标记的更多详细信息,请参阅here。
$ man id | grep -A 1 "\-\-zero"
-z, --zero
delimit entries with NUL characters, not whitespace;
我们的方法需要与上面给出的方法略有不同,但遵循许多相同的原则:
$ echo "groups:"; printf "%s" " - "; id -Gnz | \
awk 'BEGIN{FS="\0"; OFS="\n - "}{NF--; print}'
groups:
- Users
- CONSOLE LOGON
- Authenticated Users
- CurrentSession
- LOCAL
我们有一个稍微复杂一点的awk
的原因是总是有一个尾随NUL
,在这种情况下我们不想要。 \
允许我使用相同的命令继续到下一行,使事情更容易阅读。该命令相当于:
$ echo "groups:"; printf "%s" " - "; id -Gnz | awk 'BEGIN{FS="\0"; OFS="\n - "}{NF--; print}'
答案 1 :(得分:0)
使用bash
:
for i in `groups`; do echo $i; done
使用tr
:
groups | tr \ \\n
答案 2 :(得分:0)
从我看到的,您正在尝试将用户组转换为yaml
数组,尝试使用:
echo "groups:" ; for i in $(id -Gn myuser);do echo " - $i" ;done
groups:
- users
- lp
- vboxusers
- kvm
您也可以使用:
echo "groups: [ $(groups myuser | sed -e 's/.\+\s\+:\s\+\(.\+\)/\1/g' -e 's/\(\s\+\)/, /g') ]"
groups: [ myuser, lp, vboxusers, kvm ]