J'ai donc une liste de noms d'utilisateur tels que:
user1
user2
user3
Je veux appliquer id
sur chacun d'eux et obtenir quelque chose comme:
uid=100(user1) gid=5(g1) groups=5(g1),6(g6),7(g10)
.
.
Comment puis-je atteindre cet objectif? Veuillez noter que la liste est le résultat d'une autre commande, nommée mycommand
name__.
Utilisez xargs
:
mycommand | xargs -L1 id
Exemple:
$ (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)
Vous pouvez aussi faire une boucle sur l'entrée dans bash:
mycommand | while read line
do
id "$line"
done
xargs
convertit l'entrée en arguments d'une commande. L'option -L1
indique à xargs
d'utiliser chaque ligne comme unique argument pour un appel de la commande.
Avec bash, vous pouvez capturer les lignes de sortie dans un tableau:
mapfile -t lines < <(mycommand)
Et puis itérer sur eux
for line in "${lines[@]}"; do
id "$line"
done
Ce n'est pas aussi concis que xargs, mais si vous avez besoin de lignes pour plus d'une chose, c'est plutôt utile.