Shell Script Fehler beim ausführen einer Variable

nils2410

Newbie
Registriert
Dez. 2006
Beiträge
6
Hallo zusammen,

ich habe ein Problem mit dem folgendem Script

Code:
#!/bin/sh
while true
do

        Now=$(date +"%Y-%m-%d %H:%M:%S")

        echo "Warte auf Daten"
        read Line </dev/ttyACM0
        echo Line:${Line}
        ${Line}
        echo "Daten zum Server gesendet"
done

auf ttyACM0 kommt z.B. folgendes an:
Code:
sqlite3 -batch /opt/www/db/db.sqlite "INSERT INTO nodes (date,sensor,temperature,humidity,photo,moisture,volt) VALUES ('$Now',2,33,44,226,421,360)";

Gebe ich den Befehl manuell auf der Shell, funktioniert alles.

Die Ausgabe des Scripts ist folgende:

Code:
Warte auf Daten
Line:sqlite3 -batch /opt/www/db/db.sqlite "INSERT INTO nodes (date,sensor,temperature,humidity,photo,moisture,volt) VALUES ('$Now',2,33,44,226,421,360)";
sqlite3: Error: too many options: "INTO"
Use -help for a list of options.
Daten zum Server gesendet

Ich komme nicht drauf wo das Problem liegt, hat jemand eine Idee?

Danke!
 
Laut hier schon dies versucht?
Code:
sqlite3 -batch /opt/www/db/db.sqlite "INSERT INTO nodes VALUES ('$Now',2,33,44,226,421,360)";

Oder kannst du den SQLite String nicht editieren?
 
Der String ist editierbar, der wird von einem Arduino ausgegeben, dass Problem konnte ich aber leider mit der verkürzten Anweisung nicht lösen.

Ich bekomme den selben Fehler, sonst noch Ideen :)
 
Also was ich mal spontan vermute ist, dass die Zeile 10 aus deinem Skript nicht das mit den Parametern macht, was du gerne hättest. Für gewöhnlich wird ja alles, was innerhalb von "-Zeichen ist, zu einem Parameter. Das muss aber nicht so sein, wenn man den ganzen Befehl in einer Variablen hat. Folglich kann es passieren, dass du hier als Parameter für sqlite3 nicht
Code:
-batch
/opt/www/db/db.sqlite
"INSERT INTO nodes (date,sensor,temperature,....."
bekommst sondern eben:
Code:
-batch
/opt/www/db/db.sqlite
"INSERT
INTO
nodes
(date,sensor,temperature,....."

Ich leg dir mal die Benutzung von
Code:
eval "${Line}"
ans Herz. Zum debuggen hilft ein
Code:
set -vx
direkt am Anfang des Skriptes.

Keine Garantie für Erfolg, hab das nicht ausprobiert oder ähnliches.
 
Ich danke euch! Der letzte Tipp hat den gewünschten Erfolg gebracht!

Hab ewig versucht den Fehler zu finden...
 
Zurück
Oben