Date: Sun, 13 Mar 2011 22:04:38 -0400 From: Maxim Khitrov <max@mxcrypt.com> To: Scott Ballantyne <boyvalue@gmail.com> Cc: FreeBSD <freebsd-questions@freebsd.org> Subject: Re: Shell script termination with exit function in backquotes Message-ID: <AANLkTimp7CAcCg-wKuEGMsNM2=LWw5AJsBdaCevHP6R2@mail.gmail.com> In-Reply-To: <AANLkTikXcoDyWwJ2e9P4sOvR7RyfLoBGen_TWCmUTS-e@mail.gmail.com> References: <AANLkTi=-CFmxRicGcosvzhBbM3DMjbWwQNirMrJ1_KP=@mail.gmail.com> <AANLkTikXcoDyWwJ2e9P4sOvR7RyfLoBGen_TWCmUTS-e@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Mar 13, 2011 at 9:59 PM, Scott Ballantyne <boyvalue@gmail.com> wrot= e: > On Sun, Mar 13, 2011 at 8:26 PM, Maxim Khitrov <max@mxcrypt.com> wrote: >> >> Hello everyone, >> >> I might be doing something dumb here, but this doesn't make sense to >> me. When I run the following script, I would expect to see no output: >> >> ---- >> #!/bin/sh >> >> exit_prog() >> { >> =C2=A0 =C2=A0 =C2=A0 =C2=A0echo -n 'before' >> =C2=A0 =C2=A0 =C2=A0 =C2=A0exit 0 >> =C2=A0 =C2=A0 =C2=A0 =C2=A0echo -n 'after' >> } >> >> echo line 1: `exit_prog` >> echo line 2: >> echo line 3: `exit 1` >> echo line 4: >> ---- >> >> The reason I expect to see no output is because 'exit 0' should be >> called before any of the echo lines are allowed to execute. Instead, >> what I get on FreeBSD 7 & 8 is: >> >> ---- >> line 1: before >> line 2: >> ---- >> >> I don't understand this because 'exit 0' seems to terminate the call >> to 'exit_prog', but the execution of the script continues. However, >> when 'exit 1' is called, the script terminates before printing out the >> last 2 lines. >> >> It seems that 'exit' inside a function doesn't work when that function >> is called with backquotes. I assume it has something to do with the >> fact that commands in backquotes are executed in a sub-shell, but the >> behavior is inconsistent. >> >> When I run the same script on RHEL using bash, all 4 lines are printed: >> >> ---- >> line 1: before >> line 2: >> line 3: >> line 4: >> ---- >> >> What's going on here? >> >> - Max > > Backquotes run the process in a sub process, that exits. and the original > process continues. > Yes, my original expectation of having no output is incorrect, but `exit 1` terminates the parent shell in FreeBSD. That's the source of my confusion. - Max
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTimp7CAcCg-wKuEGMsNM2=LWw5AJsBdaCevHP6R2>