Hallo, Am Mon, 30 Okt 2006, Al Bogner schrieb:
Am Sonntag, 29. Oktober 2006 22:12 schrieb David Haller:
Genau im Quoting liegt das Problem, du musst darauf achten, was lokal expandiert werden soll und was wie es uebergeben wird:
Nicht so einfach ;-) Vielen Dank für die detaillierte Erklärung.
*g* [..]
Remote oder Lokal? Und welchen Grund haettest du, nicht lokal zu mailen? Mutt laesst sich gut verwenden.
Ich habe schon auf Mutt umgestellt. Zur Frage lokal vs. remote gibt es keinen triftigen Grund. Der einzige Grund warum ich es remote machen will wäre, damit der Hoster das Mail im Log finden kann. Aber eigentlich will ich dann sowieso nicht mehr viel diskutieren.
Dann mach's lokal. Macht auch die Uebergabe von Empfaenger usw. einfacher. s.u.
Mittlerweile wurde mir bei einer Domain die Shell gesperrt (-bash: fork: Resource temporarily unavailable) obwohl ich nichts besonderes getan habe, als _meine_ Textdateien in sehr kurzen Abständen wiederholt mit Kleinigkeiten zu editieren.
Gnarf.
Wie soll ich am besten mehrere Domains mit dazugehörigem User abarbeiten?
for udom in user1@host1 user2@host2; do
for udom in user1@host1; do das sollte doch auch ok sein. Ich test mal nur mit einer Domain.
Ja, geht.
Kann man die "user@domain" auch aus einer Liste übergeben, wie auch immer die Liste auszusehen hat?
Ja. Wenn du die bash o.ae. verwendest die Listen kann. declare -a CHECKHOSTS ### nicht wirklich noetig, mach ich aber gern ;) CHECKHOSTS=( "user1@host1" "user2@host2" ) CHECKHOSTS[${#CHECKHOSTS[@]}]="user3@host3" ### ${#VAR[@]} = Anzahl der Eintraege im Array for host in "${CHECKHOSTS[@]}"; do ... done
cat <
Das waere also das lokale mailen, das ich empfehlen wuerde.
if test \`stat ...\` -ne "$DIRMODE"; then
Ist das falsch? if test \`stat -c "%a" ~/public_html\` -ne "$DIRMODECHK"; then
Ich erhalte keine konkrete Fehlermeldung, es sieht irgendwie nach Quotingproblem aus, (unexpected end of file)
Sollte eigentlich gehen. Versuch's mal mit der anderen Variante: if test \$(stat -c "%a" ~/public_html) -ne "$DIRMODECHK"; then [..]
Die Ausgaben des find -ls und der chmod -c landen im Body der Mail.
Ich hoffe ich habe da nichts falsch verstanden. Ich speichere die For-Schleife mit definierte Variablen lokal ab und führer es aus.
Jep. Aber s.u.
Oder die Variante mit dem lokal gespeicherten Script statt dem 'cat'.
Das sollte IMHO egal sein.
Nicht ganz. Folgendes: ==== run_rechtecheck.sh ==== #!/bin/bash ADMIN=me@localost declare -a CHECKHOSTS ### nicht wirklich noetig, mach ich aber gern ;) CHECKHOSTS=( "user1@host1" "user2@host2" ) CHECKHOSTS[${#CHECKHOSTS[@]}]="user3@host3" ### ${#VAR[@]} = Anzahl der Eintraege im Array for host in "${CHECKHOSTS[@]}"; do ssh "$host" < rechtecheck.sh | mutt -s "Rechte auf $host" "$ADMIN" done ==== ==== rechtecheck.sh ==== #!/bin/bash exec 2>&1 ### alles auf stdout ausgeben DIRMODECHK=755 FILEMODECHK=644 if test `stat -c "%a" ~/public_html` -ne "$DIRMODECHK"; then find ~/public_html -ls find ~/public_html -type d -print0 | xargs -r -0 chmod -c "$DIRMODECHK" find ~/public_html -type f -print0 | xargs -r -0 chmod -c "$FILEMODECHK" fi ==== Wie du siehst entfaellt so komplett fast jegliches Problem beim Quoten. Zumindest wenn du keine Variablen von run_rechtecheck.sh uebergeben musst. Die Datei wird "unbehandelt" in die Pipe zu ssh zur remote-shell geschoben... -dnh --
<logic mode="patent office"> Validator error in line 1: Contradiction in terms. -- C. Faerber, A. Krey