Ausführen mit Fehlermeldung "Fehlerverursachendes Zeichen"

  • Hallo,

    ich bin fast ein totaler Neuling was den Raspberry angeht. Fertige Sachen draufzupacken ist ok, aber bei mehr wirds kompliziert.
    Hab es nun geschafft yowsup zum laufen zu bekommen. Das funktioniert super.
    Nun möchte ich gerne dass mir yowsup eine Whatsapp Nachricht auf mein Handy sendet sobald ein neuer Timer auf meinem Sat-Receiver angelegt wird.

    Hier ein Script welches ich bekommen habe:


    Leider bekomme ich beim ausführen diese Nachricht:

    Zitat


    [font="Monaco"]-:2.1: Start tag expected, '<' not found[/font]

    [font="Monaco"]^[/font]
    [font="Monaco"]./yowplug.sh: Zeile 57: ((: index <= : Syntax Fehler: Operator erwartet. (Fehlerverursachendes Zeichen ist \"<= \").[/font]

    Kann mir jemand sagen was das zu bedeuten hat?


    Zeile 57 ist dieses hier:

    Zitat

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]for ((index=1; index <= ${XML_ITEM_COUNT}; index++)) ; do[/font]

    Einmal editiert, zuletzt von Lynsch (28. März 2016 um 00:08)

  • Ausführen mit Fehlermeldung "Fehlerverursachendes Zeichen"? Schau mal ob du hier fündig wirst!

  • Das Script ist für einen Linuxfähigen-TV-Receiver, nicht für den Pi. Abgesehen von etliche Stellen die "seltsam" umgesetzt sind, ist es sehr schwer zu lesen da du es nicht in einem CODE Block gepostet hast und somit keinerlei Einrückungen zu erkennen sind...


    Wo hast du das Script her? Irgendein Link zum Original?


    Anyway...
    Guck dir mal die besagte Zeile der Fehlermeldung an: Was wird da gemacht?
    Sehr grob beschrieben ist das eine Schleife die für die Anzahl von $XML_ITEM_COUNT rotiert.
    Die Variable XML_ITEM_COUNT wird zuvor gesetzt:

    Code
    XML_ITEM_COUNT=$(echo "${XML_Daten}" | "${XML_BIN}" sel -t -v "count(/e2timerlist/e2timer)")


    und genau hiermit hat Dein Problem zu tun. XML_ITEM_COUNT enthält aus mir nicht nachvollziehbaren Gründen keine Zahl und somit funktioniert die for Schleife auch nicht - für mich wie gesagt nicht nachvollziehbar da ich weder TIMERLIST_URL emulieren kann noch weiß was xmlstarlet bewirkt.
    Füg halt mal das "#echo ${XML_ITEM_COUNT}" ein also nimmt das # weg -> einkommentieren, Script erneut ausführen und darauf achten ob dann eine Zahl ausgegeben wird?

  • Code
    framp@obelix:~/tt$ ./t
    ./t: line 5: ((: index <= : syntax error: operand expected (error token is "<= ")


    Das ist dieselbe Meldung - nur eben in English :shy:
    Der Code dazu ist

    Bash
    #!/bin/bash
    
    
    XML_ITEM_COUNT=
    
    
    for ((index=1; index <= ${XML_ITEM_COUNT}; index++)) ; do
        echo "test"
    done
  • Hi,

    hier der Originalpost. Es geht um ein PlugIn, welches automatisch Aufnahmen erstellt auf dem Receiver. Das funktioniert einwandfrei.
    Nun soll es hiermit möglich sein bei jedem neu angelegten Timer eine Whatsapp Nachricht auf seinem Handy zu bekommen.
    Da ich sehr viele Serien aufnehme, und gerne sicher stellen möchte dass die Timer auch richtig angelegt werden will ich dieses Plugin nutzen.

    http://www.vuplus-support.org/wbb3/index.php…876#post1273876


    Wenn ich das # entferne und das nochmal ausführe bekomme ich das:

    Code
    ]-:2.1: Start tag expected, '<' not found
    
    
    /yowplug.sh: Zeile 57: ((: index <= : Syntax Fehler: Operator erwartet. (Fehlerverursachendes Zeichen ist \"<= \").

    Einmal editiert, zuletzt von Lynsch (28. März 2016 um 00:18)

  • ..Dann debugg es halt noch weiter und lass dir sowas wie $XML_Daten auch noch anzeigen..


    Wie gesagt benötigt man einen Enigma2 Receiver um das nachvollziehen zu können, ist für uns also eher schlecht reproduzierbar und ich glaub besser wärs den Autor direkt zu fragen.


    PS: Bitte poste Fehlermeldungen auch in CODE

  • Ok. Danke. Der Autor antwortet leider seit Tagen nicht. Er hat mir gesagt es läuft auf einem normalen Linux Rechner bei ihm und ist nicht gedacht auf dem Enigma2 Receiver zu laufen.
    Da ich eben noch den Raspberry rumliegen hatte, wollte ich es da verwirklichen.
    In den Zweilen 13 - 16 werden ja alle relevanten Daten eingetragen. Dort eben auch der Pfad zum Receiver. Dieser funktioniert auch, da ich es manuell getestet habe.

    Wie man sich etwas "noch weiter in debug ausgeben lassen kann wie die $XML_Daten weiß ich leider nicht.

    Bisher hat sich die Nutzung des Raspberry bei mir darauf beschränkt fertige Scripts zu benutzen.
    DDClient war eigentlich der Hauptgrund da ich mit meiner alten FritzBox da ab und an Probleme hatte.
    Dank Telekom IP Tarif hat sich das ja nun auch erledigt, da die IP bleibt.

  • Naja es gibt mehrere Möglichkeiten ein bash zu debuggen - die gängigste ist das Script entsprechend aufzurufen:

    Code
    bash -x /path/to/script.sh

    Dann wird dir angezeigt was das Script macht und was zB in die Variable XML_Daten eingetragen wird, danach was dann bei XML_ITEM_COUNT ermittelt wird usw und am besten postest du die komplette Ausgabe davon bitte in CODE oder auf codepad.org (Plain Text)

  • ... Er hat mir gesagt es läuft auf einem normalen Linux Rechner bei ihm und ist nicht gedacht auf dem Enigma2 Receiver zu laufen

    Dann hast Du zwei Möglichkeiten:

    1) Lass die Finger davon
    2) Debugge

    bash lässt sich ganz nett debuggen wenn Du folgendes in der Console eingibst:

    1) script debug
    2) bash -xv <deinScript>
    3) exit
    4) less debug

    Dann kannst Du genau sehen was das Script gemacht hat und Fehler suchen :)

  • hier die ausgabe meigrafd


    Und das bekomm ich nach "less debug" so wie Framp es geschrieben hat:

    [/color]

    Einmal editiert, zuletzt von Lynsch (28. März 2016 um 01:06)

  • Wie vermutet...

    Code
    /usr/bin/wget -q -O - http://192.168.7.150:35000/web/timerlist

    liefert kein Ergebnis.

    Was passiert wenn du die URL manuell ansurfst? Bist du sicher das der Port 35000 richtig ist?

  • Ja wenn ichs so in meinen Browser kopiere, komm ich auf die e2timerlist. Vermutlich die Ausgabe, die da auch sein sollte.
    Sollte ich das http mal weglassen? Im Browser steht es so "http://192.168.7.150:35000/web/timerlist".
    Der Port ist richtig, da ich diesen manuell vergeben habe. // EDIT: Das hat auch nix gebracht.


    Das ansurfen der Adresse sieht dann so aus. Es werden alle Timereinträge gelistet. Hier nur mal der Auszug:
    Handelt sich halt um Programm, Uhrzeit, Datum usw..

    Einmal editiert, zuletzt von Lynsch (28. März 2016 um 12:28)

  • Die xml ist nicht OK. Ich habe sie mal ein klein wenig geändert in


    und bekomme dann auch ein Ergebnis

    Code
    framp@obelix:~/tt$echo $(xmlstarlet sel -t -v "count(/e2timerlist/e2timer)" <timer.xml )
    1


    Du musst rausfinden warum die xml korrupt ist und das korrigieren.

  • Ok. Ich wüsste nur nicht wie ich das anpassen kann, da das ja die Ausgabe des Receivers ist, wenn man nen neuen Timer erstellt.
    Das wird ja automatisch erstellt.


    Was hast du denn genau geändert? Am Ende das <e2timerlist> ?
    Das hab ich bei mir auch. Allerdings sind bei mir halt mehr Timer drin, daher hab ichs nur mal auf die ersten paar Zeilen beschränkt.
    Wäre sonst ne lange Liste geworden.


    EDIT:
    Hab es jetzt mal mit der XML meines Receivers im Schlafzimmer getestet.
    Da ist die Timerausgabe 0, da 0 Timer.
    Erstell ich da nen Timer funktioniert es sofort und ich bekomm ne Whatsapp Nachricht.
    Ok. Danke soweit. Jetzt muss ich sehen dass ich die XML hinbekomme.

    Also auch nach dem Austauschen der XML funktioniert es nicht. Jetzt ändere ich mal den Port auf Standard. Vielleicht macht das Probleme.


    So.
    Nach dem Ausschlussverfahren hab ich das jetzt probiert und den Fehler gefunden.
    Ich hatte den Port fürs Webinterface auf 35000 gelegt.

    Das war dann so:

    Code
    TIMERLIST_URL="192.168.7.150:35000/web/timerlist"

    Das geht scheinbar nicht.

    Nutze ich den Standardport und trage es so ein:

    Code
    TIMERLIST_URL="192.168.7.150/web/timerlist"

    funktioniert es ohne Probleme.


    Muss ich nun das Script noch über nen Crontab jede Minute starten oder kann man das irgendwie im Hintergrund laufen lassen?

    Einmal editiert, zuletzt von Lynsch (28. März 2016 um 13:51)

  • Fein :thumbs1: . Nachdem Du geschrieben hast dass Du die xml gekürzt hast dachte ich mir schon dass es wohl doch nicht an der xml liegt. Du hast bei Deinem Kürzen den Fehler reingebrach :rolleyes:
    Mit

    Code
    netstat -tulpen | grep 35000

    oder

    Code
    nmap 127.0.0.1 | grep 35000

    bekommst Du raus ob wirklich der Port 35000 benutzt wird ;)

  • Alles klar. Danke.
    Das mit dem Port ist kein Problem. Ich kann auch den Standard Port wählen, da ich sowieso nur per VPN von ausserhalb in mein Netz gehe.

    Vielleicht kannst du mir noch sagen ob ich das Script irgendwie dauerhaft laufen lassen kann oder ob man das über nen Cronjob dann minütlich startet um aktuell angelegte Timer immer per Mail zu bekommen.

  • Man kann das Script wohl so erweitern, dass es in einer Schleife in gewissen Intervallen die Daten prüft. Aber so würde ich es nicht machen. Wie Du schon angedeutet hast - erstelle eine Zeile in der Crontab und rufe das Script dort regelmäßig auf. Voraussetzung dass das ohne Probleme läuft ist, dass alle Programme mit absolutem Pfad aufgerufen werden. Daraufhin habe ich mir das Script mal angesehen und es sieht diesbezüglich gut aus und sollte keine Probleme machen.

    Du kannst es aber auch direkt prüfen wenn Du folgende Schritte ausführst:

    1) logon als pi
    2) sudo su -
    3) (PATH=""; <ABSOLUTE_PATH>/youwplug.sh)

    Wenn das durchläuft wird es auch in der Crontab kein Problem geben.

  • Code
    root@Raspbian:~#  (PATH=""; home/pi/yowplug.sh)
    -su: home/pi/yowplug.sh: Datei oder Verzeichnis nicht gefunden

    Also da bekomm ich nur das raus.
    Ich hab auch gemerkt dass ich das Script als Root starten muss, da ich sonst ein paar Berechtigungen nicht habe.
    hab dann versucht den Cronjob als Root anzulegen. Nur klappt das scheinbar nicht.

    Dazu habe ich mich als root angemeldet mit sudo su.
    habe dann die /etc/crontab geöffnet und das hier eingetragen:

    Code
    */1 *  * * *  root cd /home/pi && sh yowplug.sh
  • Code
    root@Raspbian:~#  (PATH=""; home/pi/yowplug.sh)
    -su: home/pi/yowplug.sh: Datei oder Verzeichnis nicht gefunden

    Ein absoluter Pfad beginnt immer mit /. Deshalb wird Dein Script nicht gefunden ;) (Habe diesen Link dazu auf die Schnelle gefunden.).
    Also muss es heissen:

    Code
    root@Raspbian:~#  (PATH=""; /home/pi/yowplug.sh)
    Zitat
    Code
    */1 *  * * *  root cd /home/pi && sh yowplug.sh

    Teste erst mal ohne crontab und wenn es dann funktioniert nimm

    Code
    */1 *  * * *  root /home/pi/yowplug.sh

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!