yuk*_*say 13 command-line bash pipe
所以我有一个用户名列表,例如:
user1
user2
user3
Run Code Online (Sandbox Code Playgroud)
我想申请id
他们每个人并得到类似的东西:
uid=100(user1) gid=5(g1) groups=5(g1),6(g6),7(g10)
.
.
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?请注意,该列表是另一个命令 say 的输出mycommand
。
Olo*_*rin 18
使用xargs
:
mycommand | xargs -L1 id
Run Code Online (Sandbox Code Playgroud)
例子:
mycommand | xargs -L1 id
Run Code Online (Sandbox Code Playgroud)
您还可以在 bash 中循环输入:
mycommand | while read line
do
id "$line"
done
Run Code Online (Sandbox Code Playgroud)
xargs
将输入转换为命令的参数。该-L1
选项告诉xargs
将每一行用作命令调用的唯一参数。
使用 bash,您可以将输出行捕获到数组中:
mapfile -t lines < <(mycommand)
Run Code Online (Sandbox Code Playgroud)
然后迭代它们
for line in "${lines[@]}"; do
id "$line"
done
Run Code Online (Sandbox Code Playgroud)
这不像 xargs 那样简洁,但如果您需要这些行来完成不止一件事,那么它非常有用。