[gelöst] rename Befehl, von Perl Modul aus aufgerufen, funktioniert nicht

Begonnen von RadioJames, 27 Mai 2016, 21:52:52

Vorheriges Thema - Nächstes Thema

RadioJames

Hallo,

nach stundenlangem Herumprobieren und Recherche hier und bei Tante Google bin ich am Ende mit meinem Latein und bräuchte Hilfe. Bei mir läuft Fhem auf einem Raspi 3 mit Raspbian Jessie, Kernel Version 4.4
Ich habe folgende Backup Funktion implementiert, die vom globalen Event "save" per notify getriggert wird. Sie sichert fhem.cfg, fhem.state und meine Perl Module die alle nach dem Schema 99_MyXxxUtils.pm benannt sind, in einen Backup-Ordner. Die Funktion macht soweit das, was sie soll, bis auf die letzte Zeile mit dem rename.

sub
BackupConfig()
{
  my $now = TimeNow();
  $now =~ s/ /_/g;
  $now =~ s/:/_/g;
  Log($log_level_socket, "Backed up to ./backup_cfg-state with timestamp:$now");
  `cp $attr{global}{configfile} ./backup_cfg-state/${now}_fhem.cfg`;
  `cp $attr{global}{statefile} ./backup_cfg-state/${now}_fhem.state`;
  `cp /opt/fhem/FHEM/99_My* /opt/fhem/backup_cfg-state`;
  `rename 's/^\/opt\/fhem\/backup_cfg-state\/(99_My.*Utils.pm)/${now}_$1/g' /opt/fhem/backup_cfg-state/*.pm`
}


Die letzte Zeile soll den umkopierten Modulen (z.B. 99_MyAlarmclockUtils.pm) einen Timestamp mit Datum und Uhrzeit voranstellen. Interessanterweise klappt das auch, wenn ich dieselbe Befehlszeile auf der Shell eingebe (mittles PuTTY und ssh), das ${now} natürlich testweise durch "bla" ersetzt. Nur der Funktionsaufruf aus einem Fhem Perl Modul misslingt. Meine Module sind zwar da, werden aber nicht umbenannt.
Im Fhem Log steht folgende Meldung:

2016.05.27 21:39:34 1: Backed up to ./backup_cfg-state with timestamp:2016-05-27_21_39_34
Misplaced _ in number at (eval 4) line 1.
Bareword found where operator expected at (eval 4) line 1, near "99_My"
(Missing operator before My?)
Misplaced _ in number at (eval 4) line 1.
Unknown regexp modifier "/f" at (user-supplied code), near ""
Unknown regexp modifier "/h" at (user-supplied code), near "{
#line 1
"
syntax error at (user-supplied code), near "99_My"


Könnte mir bitte jemand Licht ans Fahrrad machen?



There are 10 kind of people. Those who understand binary and those who don't.

CoolTux


`rename \'s/^\/opt\/fhem\/backup_cfg-state\/(99_My.*Utils.pm)/${now}_$1/g\' /opt/fhem/backup_cfg-state/*.pm`


Versuch mal zu escapen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

RadioJames

Danke für den Tipp, es kommen aber leider immer noch gleiche Fehlermeldung und -bild.
There are 10 kind of people. Those who understand binary and those who don't.

justme1968

ich denke es gibt mehrere probleme

- das escapen der / mit \/ wird schon auf perl ebene aufgelöst, im shell kommando landet dann nur noch ein / und der macht die regex kaputt -> du könntest jeweils noch zwei zusätzliche \\ davor schreiben (insgesamt \\\/) aber statt die regex mit / anfangen zu lassen such dir ein anderes zeichen. z.b. - oder " oder |. dann musst du die / nicht escapen.

- das $1 wird auch schon auf perl ebene aufgelöst und landet nicht im shell kommando -> \$1 schreiben

also insgesamt etwa so:`rename 's-^/opt/fhem/backup_cfg-state/(99_My.*Utils.pm)-${now}_\$1-g' /opt/fhem/backup_cfg-state/*.pm`

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

ZitatSie sichert fhem.cfg, fhem.state und meine Perl Module die alle nach dem Schema 99_MyXxxUtils.pm benannt sind,

Wenn man configDB benutzt, liegen alle diese Daten (einschließlich der 99_.*pm Dateien) in der Datenbank und man muss nur noch die Datenbank sichern. Einer der Hauptgründe seinerzeit für die Implementierung der Konfigurationsdatenbank.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Aber nicht automatisch, oder? Ich müsste meine 99er anscheinend von Hand importieren. Laut filelist ist nicht eine 99er in der DB.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

RadioJames

HURRA ... es funktioniert.

Vielen Dank an alle.

Hier die Lösung:
  `rename 's!^/opt/fhem/backup_cfg-state/(99_My.*Utils.pm)!/opt/fhem/backup_cfg-state/${now}_\$1!g' /opt/fhem/backup_cfg-state/*.pm`

Die configDB werde ich mir mal ansehen. Ganz schön anstrengend Fhem, ständig gibt's was Neues ;)
There are 10 kind of people. Those who understand binary and those who don't.

betateilchen

@RadioJames: configDB ist nicht neu.

@CoolTux: Das ist richtig. Die Moduldateien werden im Gegensatz zu Konfigurationsdateien nicht automatisch importiert. Der Grund ist simpel: Die Konfigurationsdateien müssen in der Datenbank liegen, weil sie zur Konfiguration gehören, die Moduldateien können in der Datenbank liegen, wenn der Anwender das möchte.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Danke Dir für die Erklärung.

OFF-TOPIC: Ist es ok wenn ich mein Problem und die Lösung zum fehlgeschlagenen Import ins Wiki schreibe?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Was im Wiki steht, interessiert mich ungefähr soviel wie der berühmte Sack Reis in China. Aber grundsätzlich bin ich bekanntermaßen GEGEN jeden Wiki-Eintrag zu meinen Modulen, weil da viel zu viel Halbwissen auch noch mit falschen Erklärungen und Gründen verbreitet wird und ich den ganzen Mist im Forum dann wieder x-Mal richtig erklären muss.

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

CoolTux

Alles klar. Das ist doch mal ne Meinung. Völlig ok.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net