我尝试了 getent、组命令、id -Gn $user 和一些 sed 组合,但我认为我无法实现,因此请与其他程序员联系。
我希望能够打印这个:groups abc123
输出
abc123 : devops 构建测试设计
预期输出
群组:
- 开发运营
- build
- 测试
- 设计
最佳答案
响应comment通过@Chris 那个
This only works for groups without spaces in the names!
我应该提到@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}'
关于linux - 如何在多行而不是单行输出上打印 linux 组名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34766078/