Ankündigung

Einklappen
Keine Ankündigung bisher.

executeCommandLine und Quotes

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    executeCommandLine und Quotes

    Hallo,
    ich bastel gerade an einem einfachen SMS-Gateway mit Openhab und Gammu. Die Logik ist: Variable mit Nummer und Nachricht => Rule => Bash-Script
    Mein Problem liegt jetzt darin, dass Nachrichten mit Leerzeichen nicht richtig übergeben werden. Wenn ich den Befehl aber genauso in der Bash ausführe, funktioniert alles entsprechend.

    Die Rule
    Code:
    rule "SMS-Gateway"
    when
       Item TelNr_Msg received update
    then
       val TelNr = TelNr_Msg.state.toString.split(';').get(0)
       val Msg = TelNr_Msg.state.toString.split(';').get(1)
    
    logInfo("SMS-Gateway", "TelNr: "+TelNr+" | Msg: "+Msg)  
    executeCommandLine("/etc/openhab2/scripts/sms-gateway.sh " + TelNr + " '" + Msg + "' >/dev/null")
      
     end
    Das Bash-Skript:
    Code:
    #!/bin/bash  
    ### Variablen
    # $1 = Telefonnummer
    # $2 = Text
     
    echo -e "$2" | gammu-smsd-inject TEXT $1
    Wenn ich jetzt das Item update (openhab> smarthome:update TelNr_Msg "0171XXXXXXX;Test Test"), dann wird das Script zwar wie gewünscht ausgeführt und die richtigen Variablen übergeben, ankommen tut aber nur 'Test.

    Openhab-Log:
    Code:
    2019-07-18 18:50:12.414 [INFO ] [e.smarthome.model.script.SMS-Gateway] - TelNr: 0171XXXXXXX | Msg: Test Test
    2019-07-18 18:50:12.416 [INFO ] [lipse.smarthome.io.net.exec.ExecUtil] - executed commandLine '/etc/openhab2/scripts/sms-gateway.sh 0171XXXXXXX 'Test Test' >/dev/null'
    Gammu-Log:
    Code:
    Thu 2019/07/18 18:58:23 gammu-smsd[29005]: Found 1 sms to "0171XXXXXXX" with text "'Test" cod 1 lgt 5 udh: t 1 l 0 dlr: -1 fls: -1
    Wie gesagt, in der Bash funktioniert alles: sudo -u openhab /etc/openhab2/scripts/sms-gateway.sh 0171XXXXXXX 'Test Test' >/dev/null. Die Nachricht geht auch entsprechend raus. Gammu-Log:
    Code:
    Thu 2019/07/18 19:01:57 gammu-smsd[29005]: Found 1 sms to "0171XXXXXXX" with text "Test Test" cod 1 lgt 9 udh: t 1 l 0 dlr: -1 fls: -1
    Ich habe schon versucht, die Single-Quotes mit \ zu escapen, aber das funktioniert genauso wenig.

    Jemand eine Idee?

    Viele Grüße
    Zuletzt geändert von Brainbug; 18.07.2019, 20:31.

    #2
    Ich bin mir nicht sicher, aber versuche es doch mal mit normalen Anführungszeichen (die Du natürlich mit \ escapen musst)

    Kommentar


      #3
      Hey,
      vielen Dank für deine Rückmeldung.
      Das funktioniert leider nicht:
      executeCommandLine("/etc/openhab2/scripts/sms-gateway.sh " + TelNr + " "" + Msg + "" >/dev/null") sendet eine SMS mit "Test

      Aber ich bin scheinbar einen Schritt weiter. Openhab ecaped irgendwas anderes als ". Denn wenn ich sudo -u openhab /etc/openhab2/scripts/sms-gateway.sh 01719231717 "Test Test" im Terminal eingebe, dann bekomme ich eine SMS mit "Test.

      Sieht für mich fast so aus als wenn der Escape-Character mit übergeben wird. In den Logs ist das aber nicht zu finden. Ich ürobiere mich mal weiter...

      Kommentar


        #4
        So, ich habs. Die Rule übergibt ohne Quotes und das Bash-Skript übernimmt einfach alle Zeichen ab dem 1. Leerzeichen.
        Code:
        rule "SMS-Gateway"
        when
           Item TelNr_Msg received update
        then
        val TelNr = TelNr_Msg.state.toString.split(';').get(0)
        val Msg = TelNr_Msg.state.toString.split(';').get(1)
        
        executeCommandLine("/etc/openhab2/scripts/sms-gateway.sh " + TelNr +" " + Msg)
          
        end
        Das Bash-Skript:
        Code:
        #!/bin/bash  
        ### Variablen
        # $1 = Telefonnummer
        # $2 = Text
         
        echo -e ${*:2} | gammu-smsd-inject TEXT $1

        Kommentar


          #5
          So kann man es auch machen. Ich meinte allerdings, die Quotes zu escapen, die sind ja Bestandteil des Strings:
          Code:
          [FONT=courier new]executeCommandLine("/etc/openhab2/scripts/sms-gateway.sh " + TelNr + " \"" + Msg + "\" >/dev/null")[/FONT]

          Kommentar


            #6
            Hallo,
            habe ich auch versucht, leider ohne Erfolgt. Das Ergebnis lautet nach wie vor "Test. Aber die Lösung über das Skript ist erstmal super für mich.

            Viele Grüße

            Kommentar

            Lädt...
            X