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

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

Я хотел бы создать скрипт, который вывел бы список всех владельцев всех подкаталогов, а затем проверил бы каждый идентификатор, есть ли у меня доступ к 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

Без разбораls:

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.

Связанный контент