Como faço para criar um loop a partir de uma lista resultante de um comando anterior?

Como faço para criar um loop a partir de uma lista resultante de um comando anterior?

Gostaria de criar um script que listasse todos os proprietários de todos os subdiretórios e depois verificasse cada ID se eu tivesse acesso ao sesu aos IDs.

**$**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
.
.
.
.

Responder1

use o recurso printf do awk e, em seguida, canalize para o ksh.

ls -lrth /apps/wldomains | awk '$1 ~/^d/ { printf "sesu %s\n", $3 }'

deve gerar

sesu userid1
sesu userid2
sesu userid3
sesu userid4

basta adicionar | kshquando estiver OK

ls -lrth /apps/wldomains | awk '$1 ~/^d/ { printf "sesu %s\n", $3 }'| ksh
  • Eu também compactei grep | awkemawk

Responder2

Sem analisarls:

find /apps/wldomains -type d -exec stat -c %U {} \; | sort -u | xargs -n 1 sesu -
  • find /apps/wldomains -type dencontrará todos os diretórios em /apps/wldomains(incluindo /apps/wldomainsele mesmo).

  • stat -c %Ugerará o nome de usuário do proprietário do diretório encontrado.

  • sort -upegará esses nomes de usuário e os classificará em uma lista de nomes de usuários distintos.

  • xargs -n 1 sesu -pegará esta lista e executará sesu -para cada um deles.

No Solaris, instale o pacote GNU coreutils e use gstatno lugar do stat.

informação relacionada