поскольку 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
Хотя 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
.В системе, где нет ни 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/)$//'
В системе без 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)
).