Verständnisfrage zu einem shellskript
![](https://seccdn.libravatar.org/avatar/3b88186bea83a1e6f8dc1e8959e80e75.jpg?s=120&d=mm&r=g)
Hallo ML, Folgendes Skript verstehe ich nicht ganz: ----------------------- #!/bin/bash funktion_test() { echo 'funktion_test startet' exit 1 } echo 'Programmstart' echo "`funktion_test`" echo "Nach funktion_test" exit 0 ----------------------- Wenn ich das aufrufe, passiert folgendes: ----------------------- pc53082:~/skripte # ./test.sh Programmstart funktion_test startet Nach funktion_test pc53082:~/skripte # echo $? 0 ----------------------- Frage: Wieso wird das Skript nicht in der Funktion "funktion_test" durch das exit 1 beendet ? Wieso springt das Skript nach der teilweise abgearbeiteten Funktion wieder ins Hauptprogramm zurück ? Vielen Dank schon mal für Antworten. Bernd -- Bernd Lentes Systemadministration Institut für Entwicklungsgenetik HelmholtzZentrum münchen bernd.lentes@helmholtz-muenchen.de 089 3187 1241 http://www.helmholtz-muenchen.de/idg -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
![](https://seccdn.libravatar.org/avatar/264b44a351a0d19801e6ffcfb4fd4996.jpg?s=120&d=mm&r=g)
Hallo Bernd, Lentes, Bernd schrieb:
Hallo ML,
Folgendes Skript verstehe ich nicht ganz:
Probiers mal so: ----------------------- #!/bin/bash funktion_test() { echo 'funktion_test startet' exit 1 } echo 'Programmstart' funktion_test echo "Nach funktion_test" exit 0 ----------------------- Gruß Chris
Wenn ich das aufrufe, passiert folgendes: ----------------------- pc53082:~/skripte # ./test.sh Programmstart funktion_test startet Nach funktion_test pc53082:~/skripte # echo $? 0 -----------------------
Frage: Wieso wird das Skript nicht in der Funktion "funktion_test" durch das exit 1 beendet ? Wieso springt das Skript nach der teilweise abgearbeiteten Funktion wieder ins Hauptprogramm zurück ?
Vielen Dank schon mal für Antworten.
Bernd
-- Bernd Lentes Systemadministration Institut für Entwicklungsgenetik HelmholtzZentrum münchen bernd.lentes@helmholtz-muenchen.de 089 3187 1241 http://www.helmholtz-muenchen.de/idg
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
![](https://seccdn.libravatar.org/avatar/3b88186bea83a1e6f8dc1e8959e80e75.jpg?s=120&d=mm&r=g)
Christian schrieb:
Probiers mal so: ----------------------- #!/bin/bash
funktion_test() { echo 'funktion_test startet' exit 1 }
echo 'Programmstart' funktion_test echo "Nach funktion_test" exit 0 -----------------------
Gruß Chris
Mir ist schon klar, wie das Skript richtig zu sein hat. Ich würde nur gerne dieses seltsame Verhalten verstehen. Bernd-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
![](https://seccdn.libravatar.org/avatar/cade75bc5a38eae7b8d86692a7433a68.jpg?s=120&d=mm&r=g)
On Wed 02 Sep 2009, Lentes, Bernd wrote:
Frage: Wieso wird das Skript nicht in der Funktion "funktion_test" durch das exit 1 beendet ?
`` und $() starten subshells. D.h. Deine Funktion läuft in einem separaten Prozeß, der mit exit 1 korrekt beendet wird. Probier mal echo 'Programmstart' funktion_test echo "Nach funktion_test" exit 0 Hier wird funktion_test im selben Prozeß aufgerufen. Damit beendet sich das Programm nach echo 'funktion_test startet' mit dem Returncode 1. Torsten -- Need professional mod_perl support? Just hire me: torsten.foertsch@gmx.net -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
![](https://seccdn.libravatar.org/avatar/3b88186bea83a1e6f8dc1e8959e80e75.jpg?s=120&d=mm&r=g)
Torsten Foertsch schrieb:
`` und $() starten subshells. D.h. Deine Funktion läuft in einem separaten Prozeß, der mit exit 1 korrekt beendet wird.
Aaaah. Das erklärt alles. Vielen Dank. Bernd-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (3)
-
Christian
-
Lentes, Bernd
-
Torsten Foertsch