"We are back" « oc.at

[Java] Problem bei Stringübergabe in die Shell

Burschi1620 10.03.2008 - 19:28 1133 8
Posts

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
Hallo,
ich bräuchte da mal Hilfe, sitz schon den ganzen Tag dahinter und nichts geht.

OS: Ubuntu
Sprache ist Java
Was ich in der Shell aufrufen möchte: scmxx

Command zum Senden einer SMS:
Code:
 scmxx --device /dev/ttyUSB0 --send --sms --direct --number=*TELEFONnUMMER* --text= *NACHRICHT* 

Funktioniert prima in C, PHP und natürlich in der Shell selbst.
Beispiel für PHP:
Code:
scmxx --device /dev/ttyUSB0 --send --sms --direct --number=\"$tel_nummer\" --text=\"$tel_text\" 2>&1");
Also wie man da sieht haben die Variablen vorne und hinten Hochkommas, sollen eben Strings sein (Nachricht zum Beispiel)

Problem ist nun Folgendes:
Wenn ich via Java diesen Command in der Shell ausführen möchte versteht er die Leerzeichen in der Nachricht nicht. Also "Ich bin ein Testtext" hört schon bei 'Ich' auf, ab dem Leerzeichen wird abgeschnitten und es kommt nichts mehr weiter.

Shellcommand aufruf via:
Code:
 Process p = Runtime.getRuntime().exec(*COMMAND*);

Versuche:
Code:
"scmxx --device /dev/ttyUSB0 --send --sms --direct --number=" + nummer + " --text=\"" + nachricht + "\""
"scmxx --device /dev/ttyUSB0 --send --sms --direct --number=" + nummer + " --text=" + nachricht + ""
"scmxx --device /dev/ttyUSB0 --send --sms --direct --number=" + nummer + " --text=\"Bla bla\""
"scmxx --device /dev/ttyUSB0 --send --sms --direct --number=" + nummer + " --text=\"Bla\\ bla\""
"scmxx --device /dev/ttyUSB0 --send --sms --direct --number=" + nummer + " --text=Bla\\ bla"
Auch schon versucht im String nachricht selbst \" einzufügen, aber die werden sofort als " interpretiert und via SMS mitgeschickt, dennoch der String abgeschnitten.
--unicode bei scmxx half leider auch nichts.

Ich hoffe ich hab alles gesagt und hoffe, dass jemand von euch die Lösung kennt - bin am Verzweifeln :(

edit: ha die neue Codeansicht ist feiner :)

Nico

former person of interest
Registered: Sep 2006
Location: -
Posts: 4082
und das einsetzen des unicode zeichens für das leerzeichen hilft auch nix?

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
Zitat von Nico
und das einsetzen des unicode zeichens für das leerzeichen hilft auch nix?
Danke für den Vorschlag, nur leider funktioniert das auch nicht. Wird wieder geschluckt. Ich spring heut noch an die Wand wegen dem Schmarrn... :(

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Schon mal mit dem exec() probiert, das ein String[] erwartet?

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
Ja, Programm getrennt von Argumenten. Programm getrennt von einzeln getrennten Argumenten auch.

edit:
Zitat
Pass in the environment variables in the form name=value. If you use the version of exec() with a single string for both the program and its arguments, note that the string is parsed using white space as the delimiter via the StringTokenizer class.
http://www.javaworld.com/javaworld/...1229-traps.html
Geht aber dennoch nicht wenn Programm und Argumente getrennt sind :(

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
Push, meine derzeitige Pfuschlösung is net das Wahre :D

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
Probiers mal so:
Code:
ProcessBuilder pb = new ProcessBuilder("scmxx", /* ... argumente als strings */,
         "--text=\\\"" + nachricht + "\\\"");
pb.start();
So geht es unter Windows. Vielleicht versteht es scmxx auch so:
Code:
ProcessBuilder pb = new ProcessBuilder("scmxx", /* ... argumente als strings */,
         "--text=" + nachricht);
pb.start();
Falls so Anführungszeichen in der Nachricht vorkommen musst du dir natürlich nochmal was einfallen lassen ;)

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
Danke, schau ich mir gegen Abend an. Meld mich dann

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
Ok hab das getestet.
Funktioniert leider auch nicht. Also weder Vorschlag 1 noch 2.

Generell kommts so vor als würde er den Command einfach schlucken sobald er in "Programm", "Argumente" geteilt wird. (Kein error, aber auch keine SMS :D)
Ich habs auch mal ohne Teilung versucht und da wirft er mir IO Exceptions zurück. Zb bei \" in im Command String oder einfach nur den Text als IOException.. :(
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz