Ankündigung

Einklappen

Serverwartung 21.2.



Am 21.2. im Laufe des späten Abends wird eine Serverwartung durchgeführt. Das Forum ist dadurch für gut zwei Stunden nicht erreichbar.
Es wird eine Wartungsseite geschaltet.

Mehr anzeigen
Weniger anzeigen

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