Hallo zusammen,
ich versuche mein Backup System als CustomReading in FHEM zu integrieren.
Wenn ich den folgenden Befehl in der bash ausführe, so bekomme ich entweder eine 1 oder 0 zurück - je nach dem, ob heute ein Backup lief. Dazu vergleiche ich das aktuelle Datum mit dem Datum im Backup-Log Dateinamen:
[ `ls -d -t /var/log/duply/* | head -1 | tail -c 20 | cut -c -8` == `date +'%Y%m%d'` ] && echo 1 || echo 0
Wenn ich das im Custom Reading jetzt einfach so der qx Funktion übergebe, dann bekomme ich immer eine 0, auch wenn die Ausführung des Befehls direkt in der Bash eine 1 ergibt.
Kommt hier qx irgendwie durcheinander oder muss ich mit den vielen Klammern und `´' " etwas beachten?! :-)
Danke und Grüße
Ich denke das es ein Rechteproblem sein wird.
Was bekommst Du denn als Rückgabewert wenn Du das als User fhem auf der bash ausführst?
Darf User fhem in /var/log/duply/ lesen?
Gruß
Dan
Zitat von: DeeSPe am 04 März 2019, 15:51:04
Ich denke das es ein Rechteproblem sein wird.
Glaube ich eher nicht. Auf das Verzeichnis und Dateien hat jeder Lesezugriff. Andere Zugriffe auf die Datei via qx funktionieren problemlos, z.B.
cat `ls -d -t /var/log/duply/* | head -1` | grep -q "forcing full backup" && echo 1 || echo 0
Nur der oben genannte Befehl liefert nicht das korrekte Ergebnis zurück. Ich habe die Vermutung, das könnte an den eckigen Klammern liegen?
Hi,
ich würde solche komplizierten Ausdrücke immer in eine Scriptdatei schreiben.
Alleine die Backticks ` - die sind doch im Perl sowas wie das Synonym für qx() ?
Und wer löst den Ausdruck auf?
Im Perl und qx und in Backticks und in einfachen Anführungszeichen `'%Y%m%d '` :-[ trau ich mir nicht zu vorauszusagen.
Gruß Otto
Ich habe in meinem zweiten Beitrag oben auch noch einen anderen Befehl erwähnt, welchen ich momentan via qx problemlos ausführen kann - somit scheinen die "Backticks" schon vom system selbst und nicht von perl aufgelöst zu werden - zumindest kommt dort das erwartete raus :-)
Lässt sich denn meine IF-Abfrage auch ohne die eckigen Klammern formulieren? Nur, dass ich die als Problemursache ausschließen kann.
Grüße
Du bekommst zwar etwas zurück was Dir gefällt, aber ist es wirklich das?
Schreib doch die Zeile in eine Datei und mach
qx(bash Datei)
Gruß Otto
Konnte das Problem lösen. qx scheinen wohl die == nicht gefallen zu haben. Mit folgender Alternative bekomme ich das richtige Ergebnis (überprüft):
test "`ls -d -t /var/log/duply/* | head -1 | tail -c 20 | cut -c -8`" -eq "`date +'%Y%m%d'`" && echo 1 || echo 0
Warum ist mir zwar nicht klar, aber Hauptsache es funktioniert jetzt. Wenn das nicht geklappt hätte, so hätte ich ein extra Bash Script genutzt.
Danke für eure Tipps!
Zitat von: Heiner33 am 04 März 2019, 16:40:19
Warum ist mir zwar nicht klar, aber Hauptsache es funktioniert jetzt.
POPCORN!