Am Montag, 30. Oktober 2006 19:54 schrieb David Haller: Hallo David,
Am Mon, 30 Okt 2006, Al Bogner schrieb:
Am Sonntag, 29. Oktober 2006 22:12 schrieb David Haller:
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
Auch wieder: unexpected end of file
Die Ausgaben des find -ls und der chmod -c landen im Body der Mail.
Funktioniert, aber mit der anderen Variante.
==== 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
Ich verstehe das mit den Arrays zu wenig. Ist nun das alternativ zu sehen:
CHECKHOSTS=( "user1@host1" "user2@host2" )
vs.
CHECKHOSTS[${#CHECKHOSTS[@]}]="user3@host3"
Ich habe eher an so was mit "here" gedacht, braucht natürlich nicht in eine Datei geschrieben werden. sort -u > "$CHECKHOSTS" << CHECKHOSTS user1@domain1.tld user2@domain2.tld etc. CHECKHOSTS
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...
Eine Kleinigkeit musste ich korrigieren und zwar wurde der Pfad von rechtecheck.sh nicht gefunden, mit /usr/local/bin/rechtecheck.sh war es ok. Es gibt ein leeres Mail, wenn es keine Änderung gab. Wichtig ist mir auch noch, dass das Script _1_ Datei ist, kann man die beiden Scripts nicht in 1 Datei legen? Al