
Hallo ML, ich versuche, mittels xargs alle Benutzer aus /etc/passwd zusätzlich als Datenbankuser in einer postgres-DB anzulegen. Es sind zwar nur ca. 20 accounts, ist aber eine ganz nette Übung. Ich setze folgendes auf der bash ab: grep -w 100 /etc/passwd |grep -i bash |cut -d ":" -f1 |xargs -t createuser -Sdr -U postgres Heraus kommt dann: createuser -Sdr -U postgres games bernd.lentes jens.hansen rainer.eitz test deanna.church guglielmo.roma jim.kadin elia.stupka geoff.hicks micheal.mcleod richard.baldarelli scooter.morris songyan.liu vincenza.maselli vivek.iyer createuser: too many command-line arguments (first is "bernd.lentes") Try "createuser --help" for more information. Habe auch 'mal xargs -0 probiert, hat auch nicht geholfen. Eigentlich sollte doch xargs dafür sorgen, daß createuser mehrmals aufgerufen wird, mit jeweils einem Namen als Parameter. Wieso wird createuser nur einmal aufgerufen, mit allen Usern ? Was mache ich falsch ? Bernd-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Lentes, Bernd wrote:
IMO falsch!
Wieso wird createuser nur einmal aufgerufen, mit allen Usern ?
Weils xargs genau dafür gedacht ist? ein "find . | xargs rm" macht genau das NICHT was du sagst. Es ruft eben nicht für jede Zeile von find einmal "rm" auf, sondern versucht (mit mehreren Randbedingungen, siehe "man xargs") möglichst viele Parameter in die Kommandozeile zu packen OHNE dabei die maximale Eingabelänge zu überschreiten. Das ist z.B. sinnvoll wenn ein <rm *file> "zu lang" wird. Also: falsches Kommando Andreas -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Kyek, Andreas, VF-DE schrieb:
Hi, irgendwas in der Art users=`grep -w 100 /etc/passwd |grep -i bash |cut -d ":" -f1` for user in $users do createuser -Sdr $user done sollte tun. Kannst ja statt "createuser..." erstmal "echo ..." nehmen cu jth -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Lentes, Bernd schrieb:
Hi, das mit xargs haben Dir die Anderen ja schon gesagt. Das mit grep und cut ist gruselig... fehlt nur noch cat :)) Zudem ist grep -w 100 ungenau, was ist wenn die UID 100 oder 1000 ist oder irgendwo im Namen, Beschreibung, etc, 100 vorkommt? Dasselbe gilt für bash.. könnte ja einer bashuser heissen ;) Das Ganze direkt an createuser zu verfüttern ist schon gewagt. Als Übung wäre sowas doch schöner: ------------8<----------- oIFS=$IFS IFS=: while read name pw uid group desc home shell; do \ [ "x$group" = "x100" -a "x$shell" = "x/bin/bash" ] && \ echo "$name"; done </etc/passwd > /tmp/psqlUsers.txt IFS=$oIFS ------------8<------------- Laut man bash kann read auch in ein Array einlesen, wäre natürlich eleganter :) Oder ------------8<------------- awk -F":" '$4 == 100 && $7 == "/bin/bash" {print $1}' \ /etc/passwd > /tmp/psqlUsers.txt ------------8<------------- Und dann, nachdem Du geprüft hast ob die User in /tmp/psqlUsers.txt korrekt sind: for name in $( cat /tmp/psqlUsers.txt ) ; do createuser....;done -- Gruss Bernd PS: Und ändere nächstesmal die Usernamen im Posting, braucht ja keiner wissen.... PPS: David weiss sicher noch mehr Übungen... :) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Hallo, Am Die, 23 Mär 2010, Lentes, Bernd schrieb:
Örks. getent passwd | awk -F: '$4 == 100 && $7 ~ /\/bash$/ { printf("createuser -Sdr -U postgres %s\n", $1); }' Wenn das passt, einfach die Ausgabe an die shell verfüttern: getent passwd | awk -F: '$4 == 100 && $7 ~ /\/bash$/ { printf("createuser -Sdr -U postgres %s\n", $1); }' | bash HTH, -dnh -- Shh! Be vewy quiet, I'm hunting wuntime errors! -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Am 23. März 2010 13:05 schrieb Lentes, Bernd <bernd.lentes@helmholtz-muenchen.de>:
Habe auch 'mal xargs -0 probiert, hat auch nicht geholfen.
Warum sollte es?
Eigentlich sollte doch xargs dafür sorgen, daß createuser mehrmals aufgerufen wird, mit jeweils einem Namen als Parameter. Wieso wird createuser nur einmal aufgerufen, mit allen Usern ?
Nein. man xargs xargs -n 1 sollte helfen. Gruß Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Lentes, Bernd wrote:
IMO falsch!
Wieso wird createuser nur einmal aufgerufen, mit allen Usern ?
Weils xargs genau dafür gedacht ist? ein "find . | xargs rm" macht genau das NICHT was du sagst. Es ruft eben nicht für jede Zeile von find einmal "rm" auf, sondern versucht (mit mehreren Randbedingungen, siehe "man xargs") möglichst viele Parameter in die Kommandozeile zu packen OHNE dabei die maximale Eingabelänge zu überschreiten. Das ist z.B. sinnvoll wenn ein <rm *file> "zu lang" wird. Also: falsches Kommando Andreas -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Kyek, Andreas, VF-DE schrieb:
Hi, irgendwas in der Art users=`grep -w 100 /etc/passwd |grep -i bash |cut -d ":" -f1` for user in $users do createuser -Sdr $user done sollte tun. Kannst ja statt "createuser..." erstmal "echo ..." nehmen cu jth -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Lentes, Bernd schrieb:
Hi, das mit xargs haben Dir die Anderen ja schon gesagt. Das mit grep und cut ist gruselig... fehlt nur noch cat :)) Zudem ist grep -w 100 ungenau, was ist wenn die UID 100 oder 1000 ist oder irgendwo im Namen, Beschreibung, etc, 100 vorkommt? Dasselbe gilt für bash.. könnte ja einer bashuser heissen ;) Das Ganze direkt an createuser zu verfüttern ist schon gewagt. Als Übung wäre sowas doch schöner: ------------8<----------- oIFS=$IFS IFS=: while read name pw uid group desc home shell; do \ [ "x$group" = "x100" -a "x$shell" = "x/bin/bash" ] && \ echo "$name"; done </etc/passwd > /tmp/psqlUsers.txt IFS=$oIFS ------------8<------------- Laut man bash kann read auch in ein Array einlesen, wäre natürlich eleganter :) Oder ------------8<------------- awk -F":" '$4 == 100 && $7 == "/bin/bash" {print $1}' \ /etc/passwd > /tmp/psqlUsers.txt ------------8<------------- Und dann, nachdem Du geprüft hast ob die User in /tmp/psqlUsers.txt korrekt sind: for name in $( cat /tmp/psqlUsers.txt ) ; do createuser....;done -- Gruss Bernd PS: Und ändere nächstesmal die Usernamen im Posting, braucht ja keiner wissen.... PPS: David weiss sicher noch mehr Übungen... :) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Hallo, Am Die, 23 Mär 2010, Lentes, Bernd schrieb:
Örks. getent passwd | awk -F: '$4 == 100 && $7 ~ /\/bash$/ { printf("createuser -Sdr -U postgres %s\n", $1); }' Wenn das passt, einfach die Ausgabe an die shell verfüttern: getent passwd | awk -F: '$4 == 100 && $7 ~ /\/bash$/ { printf("createuser -Sdr -U postgres %s\n", $1); }' | bash HTH, -dnh -- Shh! Be vewy quiet, I'm hunting wuntime errors! -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Am 23. März 2010 13:05 schrieb Lentes, Bernd <bernd.lentes@helmholtz-muenchen.de>:
Habe auch 'mal xargs -0 probiert, hat auch nicht geholfen.
Warum sollte es?
Eigentlich sollte doch xargs dafür sorgen, daß createuser mehrmals aufgerufen wird, mit jeweils einem Namen als Parameter. Wieso wird createuser nur einmal aufgerufen, mit allen Usern ?
Nein. man xargs xargs -n 1 sollte helfen. Gruß Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (6)
-
Bernd Obermayr
-
David Haller
-
Joerg Thuemmler
-
Kyek, Andreas, VF-DE
-
Lentes, Bernd
-
Martin Schröder