Как я могу перечислить группы пользователей, если их имена содержат пробелы?

поскольку importпримет имя .pngв качестве аргумента, сконструируйте его и вызовите import. Думайте, что сначала $()будет заменой, а затем будет передан в качестве аргумента вimport

import $(date +'screenshot-%Y%m%d-%H%M%S.png')

например, с set -xvи echoвключить

$ echo $(date +'screenshot-%Y%m%d-%H%M%S.png')
echo $(date +'screenshot-%Y%m%d-%H%M%S.png')
++ date +screenshot-%Y%m%d-%H%M%S.png
+ echo screenshot-20170716-131720.png
screenshot-20170716-131720.png
5
13.09.2019, 14:44
3 ответа

Хотя groupsне имеет возможности обнулять -разделители записей, idделает -по крайней мере в реализации GNU CoreUtils, которая должна применяться в Ubuntu 18.04 1

   -z, --zero
          delimit entries with NUL characters, not whitespace;

Так например

id -Gnz someuser

должен дать нулевой -список с разделителями имен дополнительных групп someuser, -вы можете проверить это, используя

id -Gnz someuser | xargs -0 printf '%s\n'

1 Обратите внимание, что POSIX не требует эту опцию, поэтому она не будет переносимой. См., например, Базовые спецификации Open Group

.
2
27.01.2020, 20:40

В системе, где нет ни coreutils, ни perl, но, по крайней мере, администраторы AD используют разумные имена групп, не содержащие ни запятых, ни скобок, можно проанализировать выводid:

#!/usr/bin/env bash

list_of_groups="$(id | sed 's/^.* groups=//')"
one_group=

while [[ "$list_of_groups" != "$one_group" ]]
do {
        one_group="${list_of_groups%%,*}"
        list_of_groups="${list_of_groups#*),}"
        echo $one_group
} done |
sed -e 's/^[0-9]*(//' -e 's/)$//'
1
27.01.2020, 20:40

В системе без GNU coreutils вы можете сделать то же самое в Perl с помощью

perl -le 'print((getgrgid $_)[0]) for split " ", $)'

И аналогично на любом языке, который предлагает привязки к стандартным интерфейсам getegid(2), getgroups(2)и getgrgid(3).

Обратите внимание, что getgroups(2)может возвращать или не возвращать эффективный gid процесса в списке --это то, о чем позаботится переменная $)в perl и утилитах, таких как groupsили id(perl добавит реальный/действующий gid к $(/ $), но не удалит его из списка, возвращаемогоgetgroups(2)).

1
27.01.2020, 20:40

Теги

Похожие вопросы