[linux] Re: probleem met bash exit door subshell?

Daniel C. von Asmuth asmuth op bakunin.xs4all.nl
Wo Jun 22 16:47:02 CEST 2016


Aldus schreef Paul de Vries op Wed, Jun 22, 2016 at 04:15:23PM +0200:
> > het volgende bash script is mijn probleem tot de essentie teruggebracht:
> 
> $ cat ./mytest
> #!/bin/bash -x
> 
> f1() {
>   {
>     ps $$
>     echo before f1 exit
>     exit 1
>     echo after f1 exit
>   } 2>&1 | tee f1.log
> }
> f2() {
> # {
>     ps $$
>     echo before f2 exit
>     exit 2
>     echo after f2 exit
> # } 2>&1 | tee f2.log
> }
> 
> echo main before fx
> if [ "$1" = 'f1' ]; then $1 && shift; fi
> if [ "$1" = 'f2' ]; then $1 && shift; fi
> echo main after fx
> 
> exit 0
> 
Ik denk dat die 'main' routine iets slimmer kan i.v.m. './mytest f2 f1'

> > ik wil een lange serie van functies in volgorde uitvoeren, en van elke tussenstap een log bewaren.
> > maar als er ergens iets fout gaat moet het geheel stoppen.
> 
> $ ./mytest f1 f2
> + echo main before fx
> main before fx
> + '[' f1 = f1 ']'
> + f1
> + tee f1.log
> + ps 63192
>   PID   TT  STAT      TIME COMMAND
> 63192 s002  S+     0:00.01 /bin/bash -x ./mytest f1 f2
> + echo before f1 exit
> before f1 exit
> + exit 1
> + shift
> + '[' f2 = f2 ']'
> + f2
> + ps 63192
>   PID   TT  STAT      TIME COMMAND
> 63192 s002  S+     0:00.01 /bin/bash -x ./mytest f1 f2
> + echo before f2 exit
> before f2 exit
> + exit 2
> 
> > f1 exit stopt niet, maar ik denk dat ‘tee’ in een subhell draait, niet exit.
> > heeft iemand hiervoor een suggestie?

Het lijkt er op dat 'f1' de subshell gewoon stopt bij de exit en ook het
'tee' proces. waarna de functie retourneert en f2 aangeroepen wordt.
Daar eindigt je script dan met 'exit 2' (de functie bereikt het einde
dus niet). 

Wat is het probleem dan precies?

> dank,
> paul de vries.

Met vriendelijke groet,




Daniel von Asmuth




More information about the Linux mailing list