Hauptmenü

Problem mit qx Funktion

Begonnen von Heiner33, 04 März 2019, 15:31:06

Vorheriges Thema - Nächstes Thema

Heiner33

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

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Heiner33

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?

Otto123

#3
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Heiner33

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

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Heiner33

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!

betateilchen

Zitat von: Heiner33 am 04 März 2019, 16:40:19
Warum ist mir zwar nicht klar, aber Hauptsache es funktioniert jetzt.

POPCORN!
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!