だから私は次のようなユーザー名のリストを持っています:
user1
user2
user3
それらのそれぞれにid
を適用し、次のようなものを取得します。
uid=100(user1) gid=5(g1) groups=5(g1),6(g6),7(g10)
.
.
どうすればこれを達成できますか?リストはmycommand
などの別のコマンドの出力であることに注意してください。
xargs
を使用します。
mycommand | xargs -L1 id
例:
$ (echo root; echo nobody) | xargs -L1 id
uid=0(root) gid=0(root) groups=0(root)
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Bashで入力をループすることもできます。
mycommand | while read line
do
id "$line"
done
xargs
は、入力をコマンドの引数に変換します。 -L1
オプションは、xargs
に、各行をコマンド呼び出しの唯一の引数として使用するように指示します。
Bashを使用すると、出力の行を配列にキャプチャできます。
mapfile -t lines < <(mycommand)
そして、それらを繰り返します
for line in "${lines[@]}"; do
id "$line"
done
これはxargsほど簡潔ではありませんが、複数の行を必要とする場合には非常に便利です。