如何从上一个命令返回的列表中创建循环?

如何从上一个命令返回的列表中创建循环?

我想创建一个脚本,列出所有子目录的所有所有者,然后检查每个 ID(如果我有权访问 ID 的 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

使用 awk 的 printf 功能,然后通过管道传输到 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 | awkawk

答案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.

相关内容