... the user friendly GPS tool


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Fehler im Kommandozeilenconverter bei GPX->GPI
#1
Hallo @alle!

Habe einen Fehler gefunden im Kommandozeilenconverter bei der Konvertierung von GPX->GPI

Aufruf:

/usr/lib/jvm/java-7-openjdk-amd64/bin/java -classpath /usr/share/java/RouteConverterCmdLine.jar -Djava.awt.headless=true slash.navigation.converter.cmdline.RouteConverterCmdLine datei.gpx datei.gpi
(Version 2.10)

Dabei erstellt sich der Routerconverter folgende externe Skriptdatei, um gpsbabel zu starten:

Quote:#!/bin/sh
`which chmod` a+x "/usr/bin/gpsbabel"
/usr/bin/gpsbabel -r -w -t -i gpx -f "/path/to/file.gpx" -o garmin_gpi,category=Klick in Karte; 50.47848225964282 12.117919734374984 to Klick in -F "/path/to/file.gpi"

Die Antwort der Shell ist:
Quote:GPX: Cannot open file 'in'!
bash: command not found: 50.47848225964282
Weil der Wert der Kommandozeilenoption -o nicht gequotet ist,
- bricht die Shell /bin/sh bei den Blanks vor und nach "in" in mehrere Tokens auf, gpsbabel denkt dass in die Eingabedatei und Karte die Ausgabedatei sei
- weil ; das Zeichen ist mit welchen man in Shells mehrere Befehle auf einer Befehlszeile voneinander trennt (befehl1 ; befehl2 ; befehl3 ; …) startet die nächste "Befehls"zeile" mit 50.47848225964282, was im PATH natürlich nicht gefunden wird.

In der Skriptdatei hat es also einen Fehler und ein paar Schönheitsfehler:
- Der Wert der Kommandozeilenoption -o müsste gequotet sein, also:
Quote:/usr/bin/gpsbabel -r -w -t -i gpx -f "/path/to/file.gpx" -o "garmin_gpi,category=Klick in Karte; 50.47848225964282 12.117919734374984 to Klick in" -F "/path/to/file.gpi"
- Wenn man das auf dem System installierte gpsbabel unter /usr/bin/ benutzt, ist der Aufruf von
Quote:`which chmod` a+x "/usr/bin/gpsbabel"
im externen Skript sinnlos.
- Noch ein Quelle eines möglichen Fehlers: beim chmod ist der Pfad zum GPSbabel gequotet (was sinnvoll ist, da es ja auch in c:\Pfad\mit blanks\gpsbabel.exe liegen könnte), beim Aufruf darunter fehlen die Quotes.
- Noch ein Quelle eines möglichen Fehlers: Mag als Haarspalterei erscheinen, aber es gibt nicht wenige Linux/Unix-Systeme, auf welchen /tmp und /var/tmp mit der Mount-Option "noexec" gemounted werden. Dateien von solchen Dateisystemen können nicht ausgeführt werden, auch wenn die Dateirechte ausweisen, dass jeder es dürfte.
http://linux.die.net/man/8/mount Wrote:noexec

Do not allow direct execution of any binaries on the mounted filesystem.

Jetzt hoffe ich mal, dass das jemand fixt, weil ich mich einigermaßen schwer damit tue herauszufinden, wo ich den kompletten String für -o zu greifen kriege.
Reply
#2
So, gesucht, gefunden und (hemdsärmlig und garantiert nicht schön) gefixt:
Code:
diff --git a/navigation-formats/src/main/java/slash/navigation/babel/BabelFormat.java b/navigation-formats/src/main/java/slash/navigation/babel/BabelFormat.java
index 3f9d68f..9ada28b 100644
--- a/navigation-formats/src/main/java/slash/navigation/babel/BabelFormat.java
+++ b/navigation-formats/src/main/java/slash/navigation/babel/BabelFormat.java
@@ -230,7 +230,7 @@ public abstract class BabelFormat extends BaseNavigationFormat<GpxRoute> {
         args.addAll(asList(globalFlags));
         args.addAll(asList("-i", sourceFormat,
                 "-f", escapeFilePathWithSpaces(source.getAbsolutePath()),
-                "-o", targetFormat + formatFlags,
+                "-o", "\"" + targetFormat + formatFlags + "\"",^M
                 "-F", escapeFilePathWithSpaces(target.getAbsolutePath())));
         log.info("Executing '" + args + "'");

maven hat sich dann noch einen heruntergeladen und einen weiteren abgebuildet Wink
aber die größte Not scheint gefixt.

Die anderen intern mit gpsbabel bearbeiteten Formate hab ich jetzt aber nicht nachgesehn.
Reply
#3
(16.07.2013, 11:34)Holzweg Wrote: Habe einen Fehler gefunden im Kommandozeilenconverter bei der Konvertierung von GPX->GPI

Hallo Holzweg,

danke für den Hinweis. Den Bug habe ich gerade erst eingebaut - bei (erfolgreichen) Versuch einen anderen Bug unter Windows zu beheben.

Bitte probier mal die Vorabversion aus, die ich gerade hochgeladen habe.

(16.07.2013, 11:34)Holzweg Wrote: Weil der Wert der Kommandozeilenoption -o nicht gequotet ist,
- bricht die Shell /bin/sh bei den Blanks vor und nach "in" in mehrere Tokens auf, gpsbabel denkt dass in die Eingabedatei und Karte die Ausgabedatei sei

Das war es.

(16.07.2013, 11:34)Holzweg Wrote: In der Skriptdatei hat es also einen Fehler und ein paar Schönheitsfehler: [..]

Wenn Du Dich daran machen möchtest: Patches sind willkommen.
--
Christian
Reply
#4
(16.07.2013, 16:41)routeconverter Wrote: Patches sind willkommen.

Patches oder Pull Requests?
Ich nutzte GIT bisher immer nur für mich selbst.

Gibt es hier irgendwo eine "Schuhlöffel-Seite", die einem bei der Orientierung hilft? Coding conventions, tab width, line end, etc oder ist das nicht so wichtig? Ich hab mir da schon ein paar Mal die Nase gestoßen, weil ich gegen ungeschriebenen Gesetze verstieß…
Reply
#5
(17.07.2013, 09:49)Holzweg Wrote: Patches oder Pull Requests?
Ich nutzte GIT bisher immer nur für mich selbst.

Wie Du magst. Vielleicht ist das eine gute Übung, mal Pull Requests auf github kennenzulernen. Ein Tip: mache die Deltas klein ;-)

Falls Du Verbesserungen am Skript vorhast: das muß auch unter Mac OS X funktionieren, denn dort verwendet RouteConverter es auch.

Hast Du übrigens die Vorabversion schon bei Dir ausprobieren können?

(17.07.2013, 09:49)Holzweg Wrote: Gibt es hier irgendwo eine "Schuhlöffel-Seite", die einem bei der Orientierung hilft? Coding conventions, tab width, line end, etc oder ist das nicht so wichtig? Ich hab mir da schon ein paar Mal die Nase gestoßen, weil ich gegen ungeschriebenen Gesetze verstieß…

Das ist etwas verstreut:
--
Christian
Reply
#6
(17.07.2013, 10:47)routeconverter Wrote: Hast Du übrigens die Vorabversion schon bei Dir ausprobieren können?

Du meinst die hier:
Quote:Started RouteConverter 2.11-SNAPSHOT-386 from July 16, 2013 on Oracle Corporation Java 1.7.0_21 (64-bit) and Linux 3.2.0-38-generic amd64 with 7303 MByte heap
?
Ja, und sie funktioniert. Danke sehr!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)