Seite 1 von 1

Prozeduraufrufe verschachteln

Verfasst: 02 Apr 2009, 12:30
von bernhardus
Hallo,

ich verfolge die Entwicklung von OPSI seit ca. 2 Jahren und habe mich nun auch hier im Forum angemeldet. Ich will OPSI bei uns einsetzen und erstelle gerade meine ersten Installations-Skripte.

Für die Installation von ghostscript benutze ich ein Haupt-Skript ghostscript.ins, welches die ganzen Vor- und Nacharbeiten durchführt und aus dem heraus ich ein anderes Skript mittels

Code: Alles auswählen

sub "%ScriptPath%\uninstall_prev.ins"
aufrufe, um vorhergehende Versionen zu entfernen.

Dort wiederum werden im Hauptteil abhängig von der jeweiligen Software-Version Variablen gesetzt und dann eine weitere Prozedur aufgerufen, die die eigentliche Arbeit macht, indem sie einzelne Sektionen aufruft (Code s. u.). Wenn nun eine solche Sektion (bspw. [Files_UninstPath]) aufgerufen wird, passiert gar nichts. Im Log erscheint der Eintrag

Warning: Section "Files_UninstPath" does not exist or is empty

was aber definitiv nicht zutrifft - die Sektion existiert in uninstall_prev.ins, und sie ist auch nicht leer.

Deshalb meine Frage: Gibt es eine Beschränkung der Verschachtelungstiefe von Prozedur- bzw. Sektionsaufrufen? Oder mache ich etwas grundsätzlich falsch?

Gruß
Bernd

Code: Alles auswählen

	if (IniVar ("AFPL GhostScript 8.14") = "yes")
		set $UninstPrevName$ = "afpl_gs_814"
		{...}
		sub_UninstPrev
	endif

[sub_UninstPrev]
	{...}
	Files_UninstPath
	{...}

[Files_UninstPath]
	{...}
	delete -fs $UninstPath$
	{...}


Re: Prozeduraufrufe verschachteln

Verfasst: 02 Apr 2009, 15:37
von r.roeder
Hallo,

ein als Datei ausgelagerte Prozedur kann keine Unterprozedur enthalten - alle Prozeduren/Sektionen müssen dem Skriptparser direkt zugänglich sein. Daher die weiteren Sub-Sub-Prozeduren entweder auch extern oder direkt ins Hauptskript einbinden.

Gruß,

R.Röder

Re: Prozeduraufrufe verschachteln

Verfasst: 02 Apr 2009, 16:21
von bernhardus
Ja, habe ich mittlerweile ausprobiert:

Innerhalb einer ausgelagerten Prozedur kann ich nur auf Sektionen und Prozeduren "1. Ordnung" zugreifen, also nicht aus einer Prozedur heraus eines weitere aufrufen etc. Wohl aber auf weitere ausgelagerte Prozeduren, für die dann dass eben gesagte wieder gilt.

Danke für die Info
Bernd