![Как создать цикл из списка, полученного в результате предыдущей команды?](https://rvso.com/image/109214/%D0%9A%D0%B0%D0%BA%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C%20%D1%86%D0%B8%D0%BA%D0%BB%20%D0%B8%D0%B7%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%2C%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%B2%20%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%B5%20%D0%BF%D1%80%D0%B5%D0%B4%D1%8B%D0%B4%D1%83%D1%89%D0%B5%D0%B9%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B%3F.png)
Я хотел бы создать скрипт, который вывел бы список всех владельцев всех подкаталогов, а затем проверил бы каждый идентификатор, есть ли у меня доступ к sesu к этим идентификаторам.
**$**ls -lrth /apps/wldomains | grep '^d' | awk '{ print $3 }'
userid1
userid2
userid3
userid4
.
.
.
**$**sesu - userid1
Please enter your password:
**userid1@SERVER:$**sesu - userid2
Please enter your password:
**userid2@SERVER:$**sesu - userid3
.
.
.
.
решение1
используйте функцию printf в awk, затем передайте ее в ksh.
ls -lrth /apps/wldomains | awk '$1 ~/^d/ { printf "sesu %s\n", $3 }'
должен генерировать
sesu userid1
sesu userid2
sesu userid3
sesu userid4
просто добавьте | ksh
, когда ОК
ls -lrth /apps/wldomains | awk '$1 ~/^d/ { printf "sesu %s\n", $3 }'| ksh
- Я также уплотнил
grep | awk
вawk
решение2
find /apps/wldomains -type d -exec stat -c %U {} \; | sort -u | xargs -n 1 sesu -
find /apps/wldomains -type d
найдет все каталоги в нем/apps/wldomains
(включая/apps/wldomains
себя).stat -c %U
выведет имя пользователя владельца найденного каталога.sort -u
возьмет эти имена пользователей и отсортирует их в список отдельных имен пользователей.xargs -n 1 sesu -
возьмем этот список и выполнимsesu -
для каждого из них.
В Solaris установите пакет GNU coreutils и используйте gstat
его вместо stat
.