Итак, у меня есть список имен пользователей, таких как:
user1
user2
user3
Я хочу применить id
к каждому из них и получить что-то вроде:
uid=100(user1) gid=5(g1) groups=5(g1),6(g6),7(g10)
.
.
Как я могу достичь этого? Обратите внимание, что список является результатом другой команды скажем mycommand
.
Используйте xargs
:
mycommand | xargs -L1 id
Пример:
$ (echo root; echo nobody) | xargs -L1 id
uid=0(root) gid=0(root) groups=0(root)
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Вы также можете зациклить ввод в bash:
mycommand | while read line
do
id "$line"
done
xargs
преобразует входные данные в аргументы команды. Опция -L1
говорит xargs
использовать каждую строку в качестве единственного аргумента для вызова команды.
С помощью bash вы можете записать строки вывода в массив:
mapfile -t lines < <(mycommand)
, а затем перебрать их
for line in "${lines[@]}"; do
id "$line"
done
Это не так кратко, как xargs, но если вам нужны строки для более чем одной вещи, это довольно полезно.