Hallo Liste, ich beiß mir gerade die Zähne an einem Shellskript aus: Folgendes Problem: Aus einem Shell-skript starte ich ein zweites Skript. In diesem zweiten Shell-skript will ich jetzt den Rückgabewert einer dort gestarteten Funktion im ersten Shell-skript verwenden. Ok, ich weiß, das prinzipiell Variablen nur an child-Prozesse weitervererbt werden können, weshalb ein einfaches export aus einer Subshell nicht funktioniert. Daher habe ich desweiteren mit "wait" experimentiert bzw. den Versuch gestartet, mit return einen Rückgabewert zu geben, etwa in folgender Form: if [ $? = 0 ] then return 0 else return 1 fi will er aber wegen der Syntax nicht. Kann mir jemand helfen, mein Gebiß zu schonen? Vorab vielen Dank. Grüße, Mario Gaab
On Tuesday 02 September 2003 09:31, Mario Gaab wrote:
Hallo Liste,
ich beiß mir gerade die Zähne an einem Shellskript aus:
Folgendes Problem: Aus einem Shell-skript starte ich ein zweites Skript. In diesem zweiten Shell-skript will ich jetzt den Rückgabewert einer dort gestarteten Funktion im ersten Shell-skript verwenden. Ok, ich weiß, das prinzipiell Variablen nur an child-Prozesse weitervererbt werden können, weshalb ein einfaches export aus einer Subshell nicht funktioniert. Daher habe ich desweiteren mit "wait" experimentiert bzw. den Versuch gestartet, mit return einen Rückgabewert zu geben, etwa in folgender Form:
if [ $? = 0 ] then return 0 else return 1 fi
nimm in der Subshell exit anstelle von return. Return verursacht auch hier die Fehlermeldung "return: can only `return' from a function or sourced script". Andreas PS: und verwende keine negativen RC-Werte, das funktioniert nicht!
Am Dienstag September 2 2003 09:53 schrieb Andreas Kyek:
On Tuesday 02 September 2003 09:31, Mario Gaab wrote:
Folgendes Problem: Aus einem Shell-skript starte ich ein zweites Skript. In diesem zweiten Shell-skript will ich jetzt den Rückgabewert einer dort gestarteten Funktion im ersten Shell-skript verwenden. Ok, ich weiß, das prinzipiell Variablen nur an child-Prozesse weitervererbt werden können, weshalb ein einfaches export aus einer Subshell nicht funktioniert. Daher habe ich desweiteren mit "wait" experimentiert bzw. den Versuch gestartet, mit return einen Rückgabewert zu geben, etwa in folgender Form:
if [ $? = 0 ] then return 0 else return 1 fi
nimm in der Subshell exit anstelle von return. Return verursacht auch hier die Fehlermeldung "return: can only `return' from a function or sourced script".
Danke! Hat geklappt. Grüße, Mario Gaab
* Mario Gaab schrieb am 02.Sep.2003:
Folgendes Problem: Aus einem Shell-skript starte ich ein zweites Skript. In diesem zweiten Shell-skript will ich jetzt den Rückgabewert einer dort gestarteten Funktion im ersten Shell-skript verwenden. Ok, ich weiß, das prinzipiell Variablen nur an child-Prozesse weitervererbt werden können, weshalb ein einfaches export aus einer Subshell nicht funktioniert. Daher habe ich desweiteren mit "wait" experimentiert bzw. den Versuch gestartet, mit return einen Rückgabewert zu geben, etwa in folgender Form:
if [ $? = 0 ] then return 0 else return 1 fi
Das heißt bei der shell exit, nicht return. Ist aber völlig überflüssig, was Du da machst. Laß einfach diese vier Zeilen weg, und Du hast das, was Du willst. Wenn ein Skript ausläuft, dann wird der Rückgabewert des letzten Befehls, der auch in $? steht ausgegeben. Bernd -- Was ist quoten? Quoten ist das Zitieren aus einer mail, der man antwortet. Und wie macht man es richtig? Zitate werden mit "> " gekennzeichnet. Nicht mehr als nötig zitieren. Vor den Abschnitten das Zitat, auf das man sich bezieht, mit einer Zeile Abstand oben und unten. |Zufallssignatur 12
Am Dienstag September 2 2003 10:23 schrieb Bernd Brodesser:
* Mario Gaab schrieb am 02.Sep.2003:
Folgendes Problem: Aus einem Shell-skript starte ich ein zweites Skript. In diesem zweiten Shell-skript will ich jetzt den Rückgabewert einer dort gestarteten Funktion im ersten Shell-skript verwenden. [schnipp] if [ $? = 0 ] then return 0 else return 1 fi
Das heißt bei der shell exit, nicht return.
Ist aber völlig überflüssig, was Du da machst. Laß einfach diese vier Zeilen weg, und Du hast das, was Du willst. Wenn ein Skript ausläuft, dann wird der Rückgabewert des letzten Befehls, der auch in $? steht ausgegeben.
Bei builtin Funktionen scheint das zu funktionieren, generell aber nicht. Prinzipiell ist der Returnwert einer Subshell 0, wenn das Skript erfolgreich abgeschlossen wurde. Bei meinem speziellen Fall starte ich Java bzw. hantiere mit VNC. Dort ist der Rückgabewert des letzten Befehls nicht zu kriegen. Keine Ahnung, ob z.B. bei Java der Start zu lange dauert bzw. durch die threads kein einfacher Rückgabewert zu kriegen ist. Vielleicht hat jemand auf der Liste Ahnung, warum das so ist. Grüße, Mario
participants (3)
-
Andreas Kyek
-
B.Brodesser@t-online.de
-
Mario Gaab