Ich habe also eine Liste von Benutzernamen wie:
user1
user2
user3
Ich möchte mich id
auf jeden von ihnen bewerben und etwas bekommen wie:
uid=100(user1) gid=5(g1) groups=5(g1),6(g6),7(g10)
.
.
Wie kann ich das erreichen? Bitte beachten Sie, dass die Liste die Ausgabe eines anderen Befehls ist mycommand
.
command-line
bash
pipe
Yukashima Huksay
quelle
quelle
mycommand
erwartet? Oder istmycommand
ein Skript von Ihnen und Sie fragen, wie Sie ihm die Liste der Benutzernamen als Eingabe geben können? Bitte bearbeiten und klären.Antworten:
Verwendung
xargs
:Beispiel:
Sie können die Eingabe auch in bash durchlaufen:
xargs
konvertiert Eingaben in Argumente eines Befehls. Die-L1
Option weistxargs
an, jede Zeile als einziges Argument für einen Aufruf des Befehls zu verwenden.quelle
mycommand | xargs '-d\n' -L1 id
Ziemlich immer eine gute Idee, zusammen mit dem richtigen "$ -Zitat" aller Shell Variablen.-d '\n'
undIFS= read -r
da die Eingabe als Benutzernamen bezeichnet wird, hatte ich das Gefühl, dass es übertrieben sein könnte.echo -n "root nobody" | tr ' ' '\n' | xargs -L 1 id
Mit bash können Sie die Ausgabezeilen in einem Array erfassen:
Und dann über sie iterieren
Dies ist nicht so prägnant wie xargs, aber wenn Sie die Zeilen für mehr als eine Sache benötigen, ist es ziemlich nützlich.
quelle
<
ist die übliche Umleitung vonmapfile
's stdin.<(...)
ist eine Prozesssubstitution - Prozesssubstitutionen sind sehr nützlich, um Probleme aufgrund von Pipelines zu vermeiden, die in Subshells ausgeführt werden.