Gelöst: SHELL() unter Linux: Wie richtig? (Ergänzt)

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Kitter
Beiträge: 2
Registriert: Sa, 22.03.2008 09:52
Wohnort: Duderstadt / Südniedersachsen

Gelöst: SHELL() unter Linux: Wie richtig? (Ergänzt)

Beitrag von Kitter »

Hallo,

ich schreibe ein Makro, was unter Windows und Linux laufen soll. Die Eingangdaten liegen als Textdateien vor und müssen für die Verwendung unter Linux von ISO_8859-15 nach UTF-8 konvertiert werden. Dafür habe ich hier auch schon eine Lösung mit dem Konsolenprog "iconv" gefunden und ein Shellprog geschrieben. Guxdu hier:

Code: Alles auswählen

#/bin/sh
# Aufruf aus der Konsole mit
# bash convert.sh Parameter

echo Parameter 1 $1

iconv $1


Getestet habe ich das in der Konsole, in meinem Unterverzeichnis, mit dem passenden Parameterstring. Funktioniert.

In OO-Basic habe ich dann so programmiert:

Code: Alles auswählen

Sub shellRun(dn$)
	dim ef$,param$,qd$,zd$
	qd$=dn$+".kal"
	zd$=dn$+".ut8"
  ' creating the execution string
	ef$ = "bash "+quellpfad$+"convert.sh"
	param$="-f ISO_8859-15 -t UTF8 "+quellpfad$+qd$+" -o "+quellpfad$+zd$
	msgbox param$
  ' running the shell command
	msgbox Shell(ef$, 1, param$, TRUE)
End Sub
Der Dateiname ohne Erweiterung wird an ShellRun() übergeben und zur Quelldatei (.kal), sowie zur Zieldatei (.ut8) ergänzt.
Als Ergebnis von shell(...) wird 0 (Null) gemeldet, es ist aber keine neue Datei in meinem Verzeichnis.
Wie kann ich überprüfen, ob der Parameterstring richtig übergeben wird?
Bin leider nicht firm in der Shellprogrammierung.
Vielen Dank schon mal,

Martin

Ergänzung: Mittlerweile bin ich darauf gekommen, dass ich die Shell mit OO-Basic-konformen Pfaden und Dateinamen nach RFC1738 versorgt habe. Das habe ich jetzt geändert (mittels convertfromurl(...)) auf absolute Pfade. Macht aber immer noch keine konvertierte Datei.
Mir fehlt nach wie vor eine Möglichkeit zum Prüfen des korrekten Aufrufes meines Shellscriptes.

Martin

Durch weitere Recherche die Lösung erarbeitet: 8)
Zunächst das Shellscript, welches die übergebene Parameterzeile in eine meldung.txt schreibt (bzw. anhängt).

Code: Alles auswählen

#!/bin/bash
# Aufruf aus der Konsole mit
# bash convert.sh Parameter

#Parameter speichern:
echo $1 >> /home/kitter/OO_Kal/meldung.txt

iconv $1
Durch die meldung.txt habe ich gesehen, dass von der gesendeten Parameterzeile nur der Teil bis zum ersten Leerzeichen ankommt. Das bedeutet, dass die Parameterzeile unbedingt in Anführungszeichen eingefasst werden muss (jeweils chr$(34) am Anfang & Ende).

Hier der Shell-Aufruf in OO-Basic:

Code: Alles auswählen

Sub shellRun(dn$)
	dim ef$,qd$,zd$,param$
	'Die Quelle ist
	qd$=convertfromurl(quellpfad$+dn$+".kal")
	'Das Ziel ist
	zd$=convertfromurl(quellpfad$+dn$+".utf8")
	' creating the execution string
	ef$ = "bash "+convertfromurl(quellpfad$+"convert.sh")
	msgbox ef$
	'Parameterstrimg zusammenstellen
	param$=chr$(34)+"-f ISO_8859-15 -t UTF8 "+qd$+" -o "+zd$+chr$(34)
	msgbox param$
	' running the shell command
	Shell(ef$, 1, param$, TRUE)
End Sub
Vielleicht kann's ja noch jemand anderes gebrauchen.

Noch ein frohes Osterfest wünscht

Martin