Hallo, Am Son, 03 Jan 2010, Dieter Kluenter schrieb:
David Haller
writes: Am Son, 03 Jan 2010, Dieter Kluenter schrieb:
"Dieter Kluenter"
writes: Das Script habe ich etwas vereinfacht, die funktionierende Lösung ist unter dieser URL zu finden: http://pastebin.de/2917 Wie sieht denn die Zeile mit dem contextCSN überhaupt aus?
contextCSN: 20100101163523.139663Z#000000#000#000000
zu beachten ist hier der Space zwischen dem Attribut und dem Wert, der Space darf von grep nicht übermittelt werden, daher die Lösung mit cut.
Ah. Simpel.
Nur genereller Hinweis: cut -c sollte man vermeiden. Für solch Aufgaben eignen sich sed und v.a. awk (die jew. auch gleich das grep ersetzen). Und Variablen sollte man immer quoten, wenn irgendwie möglich.
Da es sich im LDIF handelt, ist das Datenformat fest definiert, nur auf dieser Basis habe ich mich für cut entschieden. Mit Quoten habe ich es versucht, das führt aber zu etlichen Fehlermeldungen. Mit der bestehenden, funktionierenden Lösung bin ich auch nicht zufrieden, aber etwas besseres ist mir nicht eingefallen. Wenn du eine andere Lösung hast, bitte her damit.
Du hast halt sehr eigenartig gequoted bzw. die Befehle unübersichtlich verschachtelt. ==== #!/bin/bash # $Id: synctest.sh,v 1.4 2010/01/03 10:38:21 dieter Exp dieter $ set -x DATA="foo contextCSN: 20100101163523.139663Z#000000#000#000000 bar " SEARCH="/opt/openldap/bin/ldapsearch" SEARCH=echo ### DNH: dummy-cmd HOST="ldap://localhost" BASE="o=avci,c=de" BINDDN="replicator" BINDPW="geheim" ATTRS="1.1" MASTER="Master.ldif" CSN="$(awk -F': ' '/contextCSN/{print $2;}' "$MASTER")" CSN="$(echo "$DATA" | awk -F': ' '/contextCSN/{print $2;}')" ### DNH: dummy-cmd COOKIE="rid=099,csn=${CSN}" # ### Alternativ zusammenfassen: # COOKIE="rid=099,csn=$(awk -F': ' '/contextCSN/{print $2;}' "$MASTER")" "$SEARCH" -H "$HOST" -Y DIGEST-MD5 -U "$BINDDN" -w "$BINDPW" \ -b "$BASE" -s one -E"!sync=ro/${COOKIE}" "$ATTRS" ==== Die markierten Zeilen sind jew. zu löschen, da ich weder ldap noch ne .ldif hier hab ;) Als Feld-Trenner könnte man auch ne Regex verwenden (das kann perl nicht beim auto-split ;), falls nach dem ':' mehr als ein Leerzeichen vorkommen kann, zusammen mit möglichen Tabs: awk -F':[[:space:]]+' '/contextCSN/{print $2;}' Das ist auch robust gegen ':' im CSN, nur ":" plus whitespace darf nicht vorkommen. HTH, -dnh PS: ach, du bist auch ein Selbst-anpass-und-nach-/opt-Installierer? Ich verwende inzwischen vorzugsweise /opt/appname/version/ als prefix und Env-/Wrapperscripte in ~/bin/ oder /usr/local/bin (je nach Anwendungsfall). Alternativ /opt/appname-version + symlink /opt/appname. -- "Reality is that which, when you stop believing in it, doesn't go away". -- Philip K. Dick -- 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