Menanggapi komentar oleh @Chris that
Ini hanya berfungsi untuk grup tanpa spasi di namanya!
Saya harus menyebutkan bahwa solusi yang diterima oleh @ c4f4t0r dan solusi oleh @bibi akan berfungsi dalam banyak kasus. Saya menjalankan Cygwin, dan Windows
bagian dari persamaan mungkin mengapa saya lebih sering mengalami masalah ini. Tetap saja, grup dapat dibuat dengan karakter non-standar di Linux normal (menurut saya), jadi saya akan memberikan solusi untuk nama grup dengan spasi. Ruang selalu membuat hidup menyenangkan!
Saya akan segera memberikan contoh di mana spasi menyebabkan masalah. Untuk melihat nama grup dengan spasi, kita melihat keseluruhan output dari id
$ id
uid=1(me) gid=545(Users)
groups=545(Users),66049(CONSOLE LOGON),11(Authenticated Users),
4095(CurrentSession),66048(LOCAL)
(Catatan:Saya memang membuat hasilnya sedikit lebih enak dipandang di sini di StackOverflow.)
Dari sini, kita melihat bahwa grupnya adalah {'Users', 'CONSOLE LOGON', 'Authenticated Users', 'CurrentSession', 'LOCAL'}
Kami dapat melihat masalah dengan solusi yang diterima dalam kasus ini.
$ echo "groups:" ; for i in $(id -Gn);do echo " - $i" ;done
groups:
- Users
- CONSOLE
- LOGON
- Authenticated
- Users
- CurrentSession
- LOCAL
Beberapa kelompok mendapatkan nama mereka berpisah. Untuk mendapatkan output yang kita inginkan, kita perlu menggunakan perintah id, yang membutuhkan --zero
( -z
) bendera. Untuk detail selengkapnya tentang semua flag yang diteruskan ke id
, lihat di sini.
$ man id | grep -A 1 "\-\-zero"
-z, --zero
delimit entries with NUL characters, not whitespace;
Pendekatan kami harus sedikit berbeda dengan yang diberikan di atas, tetapi mengikuti banyak prinsip yang sama:
$ echo "groups:"; printf "%s" " - "; id -Gnz | \
awk 'BEGIN{FS="\0"; OFS="\n - "}{NF--; print}'
groups:
- Users
- CONSOLE LOGON
- Authenticated Users
- CurrentSession
- LOCAL
Alasan kami memiliki awk
yang sedikit lebih rumit adalah bahwa selalu ada NUL
yang tertinggal , yang tidak kita inginkan dalam kasus ini. \
memungkinkan saya untuk melanjutkan ke baris berikutnya dengan perintah yang sama, membuatnya lebih mudah dibaca. Perintah ini setara dengan:
$ echo "groups:"; printf "%s" " - "; id -Gnz | awk 'BEGIN{FS="\0"; OFS="\n - "}{NF--; print}'
Dari apa yang saya lihat, Anda mencoba mengonversi grup pengguna Anda menjadi yaml
larik, coba gunakan:
echo "groups:" ; for i in $(id -Gn myuser);do echo " - $i" ;done
groups:
- users
- lp
- vboxusers
- kvm
Anda juga dapat menggunakan:
echo "groups: [ $(groups myuser | sed -e 's/.\+\s\+:\s\+\(.\+\)/\1/g' -e 's/\(\s\+\)/, /g') ]"
groups: [ myuser, lp, vboxusers, kvm ]
menggunakan bash
:
for i in `groups`; do echo $i; done
menggunakan tr
:
groups | tr \ \\n