NEWS
Exec Befehl aus Variablen funktioniert nicht
-
Hallo, um ein Bild meiner ipcam in ein anderes Verzeichnis zu kopieren, bestimme ich die neueste Datei im Stammverzeichnis und möchte diese dann in ein fixes Verzeichnis kopieren. Da sich der Name des Bildes immer ändert, setzte ich den Kopier-Befehl mit Hilfe von Variablen zusammen. Jedoch wird das Bild nicht kopiert. wenn ich jedoch den generierten Kopier-Befehl aus dem log als Klartext in den exec-Befehl ausführe funktioniert es. Kann mir jemand helfen? Danke!
Hier der Kopier-Befehl aus Variablen:
var timeout2, result, pfad, timeout, kopieren; on({id: "MeineDatenpunkte.0.IPCam.Bewegung"/*Bewegung*/, val: true}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; sendTo("telegram", "send", { text: 'Bewegung erkannt' }); }); timeout2 = setTimeout(function () { exec('ls /home/xfinkelx/synology/xfinkelx/ipcam/tinycam/rec/ -Art | tail -n 1', function (error, result, stderr) { console.log(result); pfad = '/home/xfinkelx/synology/xfinkelx/ipcam/tinycam/rec/' + String(result); setState("MeineDatenpunkte.0.IPCam.letzte_Datei_tapo"/*letzte_Datei_tapo*/, pfad, true); timeout = setTimeout(function () { kopieren = ['cp ',getState("MeineDatenpunkte.0.IPCam.letzte_Datei_tapo").val,' /home/xfinkelx/ipcam/tapo/'].join(''); exec(kopieren); console.log("exec: " + kopieren); sendTo("telegram", "send", { text: (String(getState("MeineDatenpunkte.0.IPCam.letzte_Datei_tapo").val) + '') }); setStateDelayed("MeineDatenpunkte.0.IPCam.Bewegung"/*Bewegung*/, false, 30000, false); }, 2000); }); console.log("exec: " + 'ls /home/xfinkelx/synology/xfinkelx/ipcam/tinycam/rec/ -Art | tail -n 1'); }, 5000);
-
@xfinkelx
versuche es mal so:kopieren = 'cp ' + getState("MeineDatenpunkte.0.IPCam.letzte_Datei_tapo").val + ' /home/xfinkelx/ipcam/tapo/';
Hab keinen Ahnung woran es scheitert.
-
@ticaki
Danke für die Hilfe, aber es bringt keine Änderung. -
Re: Exec Befehl aus Variablen funktioniert nicht
Also ich habe noch ein wenig rumprobiert und festgestellt, dass zusammengesetzte Exec-Befehle bei mir grundsätzlich nicht funktionieren, ob mit oder ohne Variable spielt keine Rolle.
so liefert mir folgendes Script ein Ergebnis (Download6.png):
var result; exec('ls /home/xfinkelx/synology/xfinkelx/ipcam/tinycam/rec/ -Art | tail -n 1', function (error, result, stderr) { console.log(result); }); console.log("exec: " + 'ls /home/xfinkelx/synology/xfinkelx/ipcam/tinycam/rec/ -Art | tail -n 1');
und folgendes Script liefert kein Ergebnis:
var result; exec((['ls','/home/xfinkelx/synology/xfinkelx/ipcam/tinycam/rec/','-Art | tail -n 1'].join('')), function (error, result, stderr) { console.log(result); }); console.log("exec: " + (['ls','/home/xfinkelx/synology/xfinkelx/ipcam/tinycam/rec/','-Art | tail -n 1'].join('')));
Im log sehen jedoch Beide Befehle identisch aus...
javascript.0 2020-05-15 11:05:13.547 info (1609) script.js.MeineSkripte.Tests.test_exec1:
javascript.0 2020-05-15 11:05:13.539 info (1609) script.js.MeineSkripte.Tests.test_exec1: registered 0 subscriptions and 0 schedules
javascript.0 2020-05-15 11:05:13.538 info (1609) script.js.MeineSkripte.Tests.test_exec1: exec: ls /home/xfinkelx/synology/xfinkelx/ipcam/tinycam/rec/ -Art | tail -n 1
javascript.0 2020-05-15 11:05:13.494 info (1609) Start javascript script.js.MeineSkripte.Tests.test_exec1
javascript.0 2020-05-15 11:05:12.522 info (1609) Stop script script.js.MeineSkripte.Tests.test_exec1
javascript.0 2020-05-15 11:05:05.389 info (1609) script.js.MeineSkripte.Tests.test_exec: Download6.png
javascript.0 2020-05-15 11:05:05.351 info (1609) script.js.MeineSkripte.Tests.test_exec: registered 0 subscriptions and 0 schedules
javascript.0 2020-05-15 11:05:05.350 info (1609) script.js.MeineSkripte.Tests.test_exec: exec: ls /home/xfinkelx/synology/xfinkelx/ipcam/tinycam/rec/ -Art | tail -n 1
javascript.0 2020-05-15 11:05:05.314 info (1609) Start javascript script.js.MeineSkripte.Tests.test_exec
javascript.0 2020-05-15 11:05:01.155 info (1609) Stop script script.js.MeineSkripte.Tests.test_exec...verstehe ich nicht...
-
@xfinkelx
, ist dir aufgefallen ? 'ls','/home -
@Ralla66
ja, das war ein Fehler meinerseits.
Ersetze ich jetzt aber einen der 3 Textbausteine durch eine vorher definierte Variable oder Datenpunkt wird der Befehl nicht mehr ausgeführt. -
folgendes funktioniert bei mir:
var cmd = 'ls -l ' + '/home/'; exec(cmd, (a,b,c)=> {log(b)});
sowie das hier:
var test = [' ','home',' '].join('/'); var cmd = 'ls -l' + test; exec(cmd, (a,b,c)=> {log(b)});
@xfinkelx sagte in Exec Befehl aus Variablen funktioniert nicht:
@Ralla66
ja, das war ein Fehler meinerseits.
Ersetze ich jetzt aber einen der 3 Textbausteine durch eine vorher definierte Variable oder Datenpunkt wird der Befehl nicht mehr ausgeführt.Dir ist aufgefallen das -Art auch kein Leerzeichen hat?
mach in den Callback noch ein
if (a || c) throw (a?a:'' + c?c:'');});
mit deinen Bezeichnern zum Fehler finden rein.